13

我有以下标记

<ol>
    <li class="ListItem">
        <span class="sub">@qItem.CategoryText</span>
        <input type="image" src="http://icons.iconarchive.com/icons/tatice/just-bins/256/bin-red-full-icon.png" width="30" class="deleteIcon" name="QuestionId" value="@qItem.Id" />
    </li>
</ol>

和以下脚本

$(".ListItem").click(function(){
doActionA();
});

$(".deleteIcon").click(function(){
doActionB();
});

当我点击图片时,它也会触发 ListItem 的点击。我知道这是因为图像在 ListItem 内。但我希望在单击图像时不会触发 ListItem 的单击。有什么办法吗?

4

5 回答 5

24
$(".deleteIcon").click(function(e){
    doActionB();
    e.stopPropagation();
});
于 2013-01-08T06:28:35.577 回答
5

您需要使用event.stopPropagation()来防止事件冒泡 DOM 树。

$(".deleteIcon").click(function(event){
    event.stopPropagation()
    doActionA();    
});

您使用删除图标绑定的事件正在触发与 ListItem 绑定的父事件,因此当子事件是事件源时,您需要停止父事件的传播。

于 2013-01-08T06:28:31.527 回答
1
$(document).on("click", ".deleteIcon", function() {
  doActionB();
});

这种方法是我发现的唯一一种可以处理嵌套元素的方法,尤其是那些由诸如 Pivottable (https://github.com/nicolaskruchten/pivottable)之类的库生成的元素

于 2015-08-05T16:37:15.573 回答
0
$(".deleteIcon").click(function(){
    doActionA();
    return false;  
});
于 2013-01-08T06:30:31.010 回答
0

按照 JQuery 文档中的说明使用 .one()。

于 2013-05-22T06:03:05.843 回答