无法阻止Jquery中事件的传播

时间:2014-01-09 13:09:14

标签: jquery html stoppropagation

我有点困惑。我列出了名称旁边带有复选框的名称。该列表是在向后端发布后动态构建的。

问题是每当我点击复选框时立即取消选中它。我之所以知道这一点,是因为如果在事件中插入警报,则会实际选中该复选框,直到警报被取消。

这是我的代码:

$("#NamesList").on("click", "input[type='checkbox']", function (e) {
    CheckboxClicked();
    return false;
})
.on("click", "li", function (e) {
    e.preventDefault();
    e.stopPropagation();

    switch (e.target.nodeName) {
         case "A":
             GetPerson(e.target.href)
             break;
         case "LI":
              GetPerson($("a", e.target).attr("href"))
              break;
         default: return false;
     }

     return false;
});

事情是,我在listitem中有链接,我需要能够遵循。如果取出导航到链接的部分,则复选框功能正常。

这是典型的名称列表:

<ul id="NamesList">
     <li id="1">
         <input class="checkbox" type="checkbox" />
         <a href="/some/link/somewhere/1">John Smith</a>
     </li>
</ul>

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

$("#NamesList").on("click", "input[type='checkbox']", function (e) {
    CheckboxClicked();
    e.stopPropagation();
})

return false;替换为e.stopPropagation();return false相当于e.preventDefault(); e.stopPropagation();但是,您不希望阻止默认值:)

工作小提琴:http://jsfiddle.net/wpx6A/

答案 1 :(得分:4)

尝试

e.stopImmediatePropagation()

这将确保事件不会传播。