Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果单击事件冒泡到绑定到同一单击处理程序的元素,如何隔离单击的初始目标?_Javascript_Jquery - Fatal编程技术网

Javascript 如果单击事件冒泡到绑定到同一单击处理程序的元素,如何隔离单击的初始目标?

Javascript 如果单击事件冒泡到绑定到同一单击处理程序的元素,如何隔离单击的初始目标?,javascript,jquery,Javascript,Jquery,我正在使用一个嵌套的treeview菜单,有3层嵌套。(每层的)每个列表项负责在单击时将一些新内容加载到页面上: $('li', '#navigation').click(function(event) { // this targets all three layers of nested menu items event.preventDefault(); // prevents click from making new server request var url =

我正在使用一个嵌套的treeview菜单,有3层嵌套。(每层的)每个列表项负责在单击时将一些新内容加载到页面上:

$('li', '#navigation').click(function(event) { // this targets all three layers of nested menu items

    event.preventDefault(); // prevents click from making new server request

    var url = $("a", this).attr("href");

    loader.load(url);
});
问题是,当您单击一个嵌套列表项(向下一层或两层)时,“单击”会在其上方的每个列表项中弹出,导致所有三个都运行指定的事件处理程序
loader.load()
方法。依次,单击任何嵌套列表项将加载顶级列表项的内容

因此,当事件触发时,我想检查导致事件处理程序执行的是否是单击的发起人。Event.target(以及任何告诉我当前列表项的内容)将不起作用,因为它们告诉我当前正在启动的项,而不是发起者

最后,event.stopPropogation()将不起作用,因为它将停止所有嵌套元素的传播,因为它们包含在更高级别的元素中

关于如何确定点击事件的发起人,有什么想法吗


更新:这是JSFiddle:

我认为这与您的选择器有关? $(“a”,this)将触发所有标记。
我可能错了

返回false;似乎做到了这一点:


只需绑定到锚,而不是
li
。为什么首先要绑定到
li

$('#navigation').on('click', 'a', function(event) {
  event.preventDefault();

  var url = $(this).attr('href');

  // whatever else your code does
});

也许可以快速创建一个包含html的JSFIDLE?就可以了。谢谢你的建议。刚刚添加了一个:事实上,我不确定我是否理解你对事件原因的解释。stopPropagation();不起作用。我认为我下面的答案是一样的。@BryceJohnson
return false
event.preventDefault()
event.stopPropagation()是一样的。(如果使用的是
return false
,则不需要第一行)我明白了。。。虽然现在,在我的整个项目中这样做也会导致它阻止UI事件。。。我将用一个例子来复制。@BryceJohnson看到我的答案;你不只是处理锚上的点击有什么原因吗?“你根本不应该去管理那些冒泡的事件。”Mathletics回应你的回答说:“老实说,我不知道我们为什么要受li的约束。”。我正在使用其他人的代码。这似乎暂时有效。谢谢
$('#navigation').on('click', 'a', function(event) {
  event.preventDefault();

  var url = $(this).attr('href');

  // whatever else your code does
});