jQuery两次射击,事件冒泡?

时间:2010-11-29 19:54:51

标签: jquery

我已经查看了人们在事件冒泡和jQuery两次触发时遇到的所有问题,但我无法弄清楚这个问题。我一次只点击一个DIV,但是点击处理程序会触发两次。

HTML

<div class="scroll-content-item" data-pid="1773">
    <img src="somefile" class="mixdock-img" data-pid="1773"/>
</div> 
<div class="scroll-content-item" data-pid="1777">
    <img src="someotherfile" class="mixdock-img" data-pid="1777"/>
</div> 

...的jQuery

jQuery(document).ready(function($) {

var count = 0;

// On click, hide the currently displayed post and show the one clicked
$('.scroll-content-item').click(function () {
    count += 1;
    alert("count = "+count);
    event.stopPropagation();
});

});

这样做是为每次点击显示两个警报,每个警报具有相同的计数。每次点击都会增加计数。

5 个答案:

答案 0 :(得分:9)

您必须将event变量传递到您的函数中,如下所示:

$('.scroll-content-item').click(function (event) {

答案 1 :(得分:6)

我无法在jsbin:http://jsbin.com/ixabo4

上重现该问题

你有可能两次包含jQuery脚本吗?

答案 2 :(得分:5)

听起来整个代码执行两次,你的两个完整实例:

jQuery(document).ready(function($) {
  //...
});

...正在执行(每个都有自己的count变量),确保脚本未在页面中包含两次。要确认这是问题,您可以添加警报(此时您应该看到两次):

jQuery(document).ready(function($) {
  alert("init");
  //...
});

答案 3 :(得分:3)

jQuery(document).ready(function($) {

        var count = 0;

        // On click, hide the currently displayed post and show the one clicked
        $('.scroll-content-item').click(function(e, ui) {
            e.stopPropagation();
            count += 1;
            alert("count = " + count);
        });

    });

在我的测试中工作正常。即使是嵌套的div,类为“scroll-content-item”。我会确保你不会多次将一个监听器附加到点击处理程序。

如果找不到调用代码的位置,请在附加侦听器之前添加以下内容:

$('.scroll-content-item').unbind('click');

答案 4 :(得分:3)

$('.scroll-content-item').unbind('click').bind('click', function(e) {
    alert("clicked");
});