Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 JQuery事件冒泡问题_Javascript_Jquery - Fatal编程技术网

Javascript JQuery事件冒泡问题

Javascript JQuery事件冒泡问题,javascript,jquery,Javascript,Jquery,JSFiddle: 下拉菜单有问题 “问题我的子类别”列表项中有一个ul/下拉列表,因此我抓起该列表项并使用“.find”获取下拉列表,然后尝试滑动切换它 问题是我有3个列表项,当我单击其他列表项时,它们也会打开和关闭其他列表项,例如,只有第一个列表项上的下拉列表,但如果单击第二个/第三个列表项,它们也会切换 我认为这与事件冒泡有关,因为我认为“.find”只向下遍历,而不是向上遍历 有人能解释为什么会发生这种情况吗?谁发生了冒泡事件以及如何解决它 干杯 HTML JQuery var drop

JSFiddle:

下拉菜单有问题

“问题我的子类别”列表项中有一个ul/下拉列表,因此我抓起该列表项并使用“.find”获取下拉列表,然后尝试滑动切换它

问题是我有3个列表项,当我单击其他列表项时,它们也会打开和关闭其他列表项,例如,只有第一个列表项上的下拉列表,但如果单击第二个/第三个列表项,它们也会切换

我认为这与事件冒泡有关,因为我认为“.find”只向下遍历,而不是向上遍历

有人能解释为什么会发生这种情况吗?谁发生了冒泡事件以及如何解决它

干杯

HTML

JQuery

var dropdownItem = $(".dropdown-item");
var dropdownSubItem = $(".sub-dropdown");
var DropdownSubItem = $(".dropdown-sub-item");
var subDropdownChild = $(".sub-dropdown-child");

// Open
dropdownItem.on("click", function(e) {
  e.preventDefault();
  dropdownSubItem.show();

  // Open sub cat
  dropdownSubItem.on("click", function(e) {
    e.stopPropagation();
    $(this).find(subDropdownChild).slideToggle();
  });
});

将JS更改为以下内容: $.dropdown-item.onclick,function{ e、 防止违约; $this.find.sub-dropdown.toggle; }; $.sub-dropdown.onclick,function e{ e、 停止传播; $this.find.sub-dropdown-child.slideToggle; }; $.sub下拉菜单-child.onclick,function e{ e、 停止传播; }; .子下拉列表, .子下拉式子菜单{ 显示:无; } 2件事:

将子项的单击事件单独保留在第一个事件之外。 您必须已将单击事件附加到li.DropdownSubItem而不是ul.DropdownSubItem。 这是更新后的代码和


错误:它甚至在点击Sub-Cat Child时也会滑动1@MilanChheda谢谢,修正了。@Arg0n谢谢,伙计,你能解释一下我做错了什么/你为什么这样做吗?Cheers@JoeConsterdine添加了一个breif解释。嗨,伙计,谢谢你的解释。除了上一节添加了传播之外,我完全理解了这一点。事件绑定如何工作,即传播如何修复它?
.sub-dropdown,
.sub-dropdown-child {
  display: none;
}
var dropdownItem = $(".dropdown-item");
var dropdownSubItem = $(".sub-dropdown");
var DropdownSubItem = $(".dropdown-sub-item");
var subDropdownChild = $(".sub-dropdown-child");

// Open
dropdownItem.on("click", function(e) {
  e.preventDefault();
  dropdownSubItem.show();

  // Open sub cat
  dropdownSubItem.on("click", function(e) {
    e.stopPropagation();
    $(this).find(subDropdownChild).slideToggle();
  });
});
// Open
dropdownItem.on("click", function(e) {
  e.preventDefault();
  dropdownSubItem.show();
});

// Open sub cat
DropdownSubItem.on("click", function(e) {
  $(this).find(subDropdownChild).slideToggle();
  e.stopImmediatePropagation();
});