是否有一种不那么黑客的方法来阻止我的开始('点击')两次开火?

时间:2015-01-09 17:09:07

标签: javascript jquery web zurb-foundation

我的页面顶部和底部有一个元素.trigger。它是.center的子元素,也会出现两次。我的代码很简单:

$(document).unbind('click').on('click', '.trigger', function() {
    alert('success');
});

这对我来说很麻烦,看起来像个黑客。但是,如果我使用:

$(document).on('click', '.trigger', function() {
    alert('success');
});

点击时会发射两次,我不明白为什么?任何人都可以解释为什么会发生这种情况,以及如何防止它发生?如果我这样做:

$('.center').on('click', '.trigger', function() {
    alert('success');
});

然后它只会在.trigger的第二个实例上触发(虽然它只会触发一次,正如我所期望的那样)。

有人能解释这三种情况的奇怪行为,并提供解决方案吗?

HTML:

// some html
<div class="center">
    <div class="trigger">blah</div>
</div>
// lots of more html
<div class="center">
    <div class="trigger">blah</div>
</div>
// some html

修改

.trigger的第一个块实际上是AJAX,它使用了名为data-interchange http://foundation.zurb.com/docs/components/interchange.html的基金会中的工具

1 个答案:

答案 0 :(得分:0)

本周早些时候,我在整个DOM中搜索了一个regex方法,并用当前所选语言替换了所有出现的字符串__LANG__(例如:eng)(用于链接目的)。

代码是:

var replaced = $("body").html().replace(/_LANG_/g,lang);
$("body").html(replaced);

它取代了正文,但似乎也复制了我的所有script。如果您在SE上搜索str_replace使用javascript的所有字符串实例的方法,上面的代码段会在结果中出现很多,但我不建议将其用作替换整个{{1}似乎是个坏主意。

删除该代码后,我的代码停止了两次。