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"); } }); );
当我点击body时,我希望它能关闭div,这样就行了。 当我点击.btn close时,它也能很好地工作 <>但是当我点击元素时,应该使用基础代码打开和关闭下拉,什么也没有发生。 控制台输出如下: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> 身体事件怎么可能不是最后触发的?事件不应该从最里面的元素冒泡到
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,这已经起作用了,所以基本上相同的冒泡问题,不同的方法。您正在阻止它从委托中的主体在其按钮上转到文档