单击链接(扩展器)后仅执行一次警报

Posted

技术标签:

【中文标题】单击链接(扩展器)后仅执行一次警报【英文标题】:Execute alert only once after a link (expander) has been clicked 【发布时间】:2013-04-25 21:57:34 【问题描述】:

希望有人可以帮助我完成下一个挑战。以下脚本与我的 html 结合使用,当我单击展开的标题时,它会打开和关闭。我还调用了一个警报函数,它显示扩展标题的文本。这行得通。

我想做的是使警报只能显示一次,并且对已单击的展开器标题的任何后续单击都会停止显示警报。

这是我正在使用的 Jquery 代码...

  somesite.ca = 
        init: function() 
    $('.qa-set')
        .find('.answer')
            .addClass('hide')
            .end()
        .find('h3')
            .addClass('collapsed')
            .bind('click', this.click);
    $('#expand').bind('click', this.expandAll);
    $('#collapse').bind('click', this.collapseAll);
,

click: function()
    $(this)
        .toggleClass('collapsed')
        .parent()
            .find('.answer')
                .slideToggle('fast');
                // Once the expander has been clicked execute alert only once for that particular expander header
                alert($(this).text());

,



希望这是有道理的。非常感谢!

【问题讨论】:

【参考方案1】:

alert() 包装在一个 if 语句中,用于检查是否设置了变量。

var expander_clicked = false;

click: function()
$(this)
    .toggleClass('collapsed')
    .parent()
        .find('.answer')
            .slideToggle('fast');
    if (!expander_clicked)  // only alert if expander wasn't previously clicked
        alert($(this).text());
        expander_clicked = true;
    
,

【讨论】:

哇,谢谢!效果很好!一个小问题是,一旦单击其中一个扩展器,此代码将禁用所有扩展器的警报。这可能会清楚地解释我正在尝试做的事情(抱歉,如果缺乏适当的解释):页面上有 5 个扩展器。用户单击展开器 1(触发警报)然后单击展开器 3(触发警报),用户单击展开器 4(触发警报),再次单击展开器 1(无警报),然后再次单击展开器 3(无警报)。所以警报是特定于扩展器的。希望这更清楚,我没有浪费你的时间。你写的很完美,太完美了:) 似乎如果我添加 this.expander_clicked 它似乎工作。 $(this) .toggleClass('collapsed') .parent() .find('.answer') .slideToggle('fast'); if (!this.expander_clicked) alert($(this).text()); this.expander_clicked = true; ,任何人都可以看到我的结构存在潜在问题吗?再次感谢!很棒的社区...

以上是关于单击链接(扩展器)后仅执行一次警报的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击事件中的模式弹出扩展器中的iframe中加载页面?

Forge 查看器:Autodesk.BoxSelection 扩展错误

如何单击折叠的 WPF 扩展器后面的内容?

Delphi在Windows资源管理器中右键单击添加菜单项

Forge Viewer - React 应用程序内的标记扩展

我如何将字符串从主要活动传递到带有警报管理器的广播接收器?