有没有更简单的方法来防止我的 on('click') 触发两次?

Is there a less hack-y way to prevent my on('click') from firing twice?

我有一个元素 .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 在 Foundation 中使用一个名为 data-interchange http://foundation.zurb.com/docs/components/interchange.html

的工具

本周早些时候,我搜索了一种方法来对整个 DOM 进行正则表达式,并将所有出现的字符串 __LANG__ 替换为当前选择的语言(例如:eng)(用于链接目的)。

密码是:

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

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

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