Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 为什么在特定元素上的事件之前调用我的主体上的事件? $(function() { var $carsDropdown = $("#cars-dropdown"); // Close cars dropdown when clicking outside of it or on close button $("body, #cars-dropdown .btn-close").click(function(ev) { if ($carsDropdown.hasClass("open")) { console.log("Dropdown is open"); console.log("Closing dropdown.\n"); Foundation.libs.dropdown.close($carsDropdown); // ev.stopPropagation(); } else { console.log("Dropdown is closed\n"); } }); );_Javascript_Events_Zurb Foundation 5 - Fatal编程技术网

Javascript 为什么在特定元素上的事件之前调用我的主体上的事件? $(function() { var $carsDropdown = $("#cars-dropdown"); // Close cars dropdown when clicking outside of it or on close button $("body, #cars-dropdown .btn-close").click(function(ev) { if ($carsDropdown.hasClass("open")) { console.log("Dropdown is open"); console.log("Closing dropdown.\n"); Foundation.libs.dropdown.close($carsDropdown); // ev.stopPropagation(); } else { console.log("Dropdown is closed\n"); } }); );

Javascript 为什么在特定元素上的事件之前调用我的主体上的事件? $(function() { var $carsDropdown = $("#cars-dropdown"); // Close cars dropdown when clicking outside of it or on close button $("body, #cars-dropdown .btn-close").click(function(ev) { if ($carsDropdown.hasClass("open")) { console.log("Dropdown is open"); console.log("Closing dropdown.\n"); Foundation.libs.dropdown.close($carsDropdown); // ev.stopPropagation(); } else { console.log("Dropdown is closed\n"); } }); );,javascript,events,zurb-foundation-5,Javascript,Events,Zurb Foundation 5,当我点击body时,我希望它能关闭div,这样就行了。 当我点击.btn close时,它也能很好地工作 但是当我点击元素时,应该使用基础代码打开和关闭下拉,什么也没有发生。 控制台输出如下: Dropdown is open. Closing dropdown. 就像我单击.btn close时一样 从这里我得出结论,在正文中的某个事件在按钮上的基础事件之前被触发,这将触发下拉。 我的事件关闭下拉和基础代码切换它打开。< /P> 身体事件怎么可能不是最后触发的?事件不应该从最里面的元素冒泡到

当我点击body时,我希望它能关闭div,这样就行了。 当我点击.btn close时,它也能很好地工作

<>但是当我点击元素时,应该使用基础代码打开和关闭下拉,什么也没有发生。 控制台输出如下:

Dropdown is open.
Closing dropdown.
就像我单击
.btn close
时一样

从这里我得出结论,在<代码>正文中的某个事件在按钮上的基础事件之前被触发,这将触发下拉。 我的事件关闭下拉和基础代码切换它打开。< /P> 身体事件怎么可能不是最后触发的?事件不应该从最里面的元素冒泡到最后的主体标记吗

现在,当我取消注释
ev.stopPropagation()
行时,一切正常。单击主体可防止传播到其他元素?这怎么可能


对于测试,请使用此代码笔:

他们的事件侦听器很可能被委托到文档中,以便您可以动态添加此类功能

这就是为什么在添加类之前会看到body事件

检查目标,如果它是
数据下拉列表
元素,则不要执行任何操作

$("body, #cars-dropdown .btn-close").click(function(e) {

  if (!$(e.target).closest('[data-dropdown]').length) {

    if ($carsDropdown.hasClass("open")) {
      console.log("Dropdown is open");
      console.log("Closing dropdown.\n");
      Foundation.libs.dropdown.close($carsDropdown);
    } else {
      console.log("Dropdown is closed\n");
    }
  } else {
    console.log('Foundation Dropdown button');
  }
});

他们的事件监听器很可能被委托给文档,所以您可以动态添加此类功能

这就是为什么在添加类之前会看到body事件

检查目标,如果它是
数据下拉列表
元素,则不要执行任何操作

$("body, #cars-dropdown .btn-close").click(function(e) {

  if (!$(e.target).closest('[data-dropdown]').length) {

    if ($carsDropdown.hasClass("open")) {
      console.log("Dropdown is open");
      console.log("Closing dropdown.\n");
      Foundation.libs.dropdown.close($carsDropdown);
    } else {
      console.log("Dropdown is closed\n");
    }
  } else {
    console.log('Foundation Dropdown button');
  }
});

@charlietfl-是的,但是单击body应该是最后一个调用。这就是我的问题——为什么TI是第一个。它不应该这样运作,也许它来自基金会。如果我尝试E.PrimeSt违约,就不会阻止基金会的拨号。它看起来不像是经典的event@Nevosis-谢谢你的帮助。您的意思可能是
ev.stopPropagation()
。我对问题进行了编辑,以包含此信息。因为单击按钮会首先触发,然后单击主体会触发第二次。@epascarello-这是应该发生的,但似乎没有发生。@charlietfl-是的,但单击主体应该最后调用。这就是我的问题——为什么TI是第一个。它不应该这样运作,也许它来自基金会。如果我尝试E.PrimeSt违约,就不会阻止基金会的拨号。它看起来不像是经典的event@Nevosis-谢谢你的帮助。您的意思可能是
ev.stopPropagation()
。我对问题进行了编辑,以包含此信息。因为单击按钮会首先触发,然后单击主体会触发第二个。@epascarello-这是应该发生的,但似乎没有发生。谢谢,但如果我取消注释
ev.stopPropagation()
行,这已经起作用了。好吧,基本上相同的冒泡问题,不同的方法。您正在阻止它从他们的按钮上的委托中的body进入document,但是如果我取消注释
ev.stopPropagation()
line.ok,这已经起作用了,所以基本上相同的冒泡问题,不同的方法。您正在阻止它从委托中的主体在其按钮上转到文档