jQuery Live+mouseup函数,只激活子元素



HTML

<div class="mybox" id="element1">
<div class="mybox" id="element2">
<div class="mybox" id="element3">
</div>
<div class="mybox" id="element4">
</div>
</div>
</div>

JS-

$(".mybox").live("mouseup", function(event) {
alert($(this).attr("id"));
});

好吧,我的问题是如何只获取活动的div(我点击的那个,而不是所有的父)。当我点击element2时,我得到element2&然后"element1"激活,当我点击element3时,我得到element2&然后元素1再次激活,等等

有什么建议吗?

您看到所有这些警报的原因是由于事件冒泡。每次单击某个元素时,事件都会在链上传播。每一个附带了点击事件的元素都将被执行。

为了确保您只在单击当前元素时执行代码,并忽略冒泡事件,请更改事件以检查当前元素是否是您使用event.target单击的元素,然后才执行您想要的代码:

$(".mybox").live("mouseup", function(event) {
if(event.target === this){
alert($(this).attr("id"));
}
});​

DEMO-使用live

如果您使用的是jQuery 1.7或更高版本,live()已被弃用,并且on()现在是附加和删除事件的首选方式。

要使用on(),您可以执行以下操作:

(document).on("mouseup", ".mybox", function(event) {
if (event.target === this) {
alert($(this).attr("id"));
}
});​

DEMO-使用on()

当使用on()时,您可以指定最接近的静态元素,在上面的示例中就是文档。但是,如果您有一个更接近的静态元素,则应该使用它而不是document

我已经在答案中链接了所有需要的文件,但要再次总结。

资源

  • live()-提供了它被弃用的所有详细信息
  • on()-自1.7起首选
  • delegate()-自1.4.2或更高版本起,可以使用它而不是live

正如Francois所写,这种效果被称为"事件冒泡"。但是jquery有自己的功能来防止事件向上传播:stopPropagation

$("p").click(function(event){
event.stopPropagation();
// do something
}); 

只有当这种方法在您的特殊情况下不起作用时,才应该使用比较事件目标的解决方案。

相关内容

  • 没有找到相关文章

最新更新