jQuery多次点击事件

5
我被迫使用从外部服务器加载的脚本。
该脚本基本上会添加一个名为<div class="myClass">的元素,并将click方法绑定到它上面。
问题是,在与元素相关联的click函数中,它们在结尾处有一个return false语句。
我也有自己的脚本,试图向相同的元素添加click方法,使用 $(document).on('click', '.myClass', function() { ... }) 我的问题是,他们的事件会先触发,而他们函数中的return false不会触发我的click方法。
我已经尝试在他们之前加载我的脚本,但那没有解决问题。 我读过关于解除绑定然后重新绑定的内容,但我不确定这是一个好选择,因为他们的代码随时可能改变。
还有其他什么我可以尝试的吗?

1
一种方法是将事件作为参数传递并在脚本中使用 event.preventDefault() - Dipesh Parmar
@DipeshParmar 我不确定我理解了。我应该在哪里传递这个事件? - VVV
你可以尝试使用事件命名空间 $(document).on('click.namespace', '.myClass', function() { ... }) 吗? - Khanh TO
5个回答

5
你需要让你的处理函数返回false,这可以防止事件冒泡。
在你的HTML标记中,你需要写入类似以下的内容:
<button type="button" class="btn" onclick="myHandler(); return false;"></button>

如果您使用jQuery:
$(".btn").on('click', function (event){ 
    //do stuff..
    return false;
});

1
虽然这是真的,但这不是我问的问题,谢谢。 - VVV

2
问题是事件委托取决于事件冒泡到绑定处理程序的元素。当其处理程序返回 false 时,这会阻止冒泡。
您需要在添加元素后直接将处理程序绑定到元素上:
$(".myClass").click(function() { ... });

这个有效!谢谢。我试图使用.on方法写更少的代码,但似乎不行。谢谢! - VVV

1

最近我也遇到了同样的问题。我解决的方法是,在该元素上添加了另一个类:

$(document).load(function() {
    $(".myClass").addClass("myNewClass");
});

然后将单击事件绑定到该类,如下所示:

$(document).on("click", ".myNewClass", function () { ... }); 

这对我很有用,因为它覆盖了myClass类的myNewClass点击事件。

1
尝试这个:

试一下:

$(document).on('click', '.myClass', function(e) {
   e.preventDefault();
   ... 
   ...
})

0
在你的onLoad中,为myClass div添加一个新类,然后为该新类设置事件监听器。
$(".myClass").addClass("myClass2");

$(".myClass2").on('click', function() { ... })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接