单击外部元素 - JQuery

时间:2016-10-31 16:09:54

标签: javascript jquery

我想了解当你点击外面时如何隐藏元素。

这是来自:

https://css-tricks.com/dangers-stopping-event-propagation/

$(document).on('click', function(event) {
  if (!$(event.target).closest('#menucontainer').length) {
    // Hide the menus.
  }
});

有人可以帮我解决这个问题吗?我不明白为什么我们需要使用length属性?

最近的最近遍历是从DOM的顶部开始,然后停止它到达顶部吗?

干杯

3 个答案:

答案 0 :(得分:2)

您需要检查长度,因为jQuery查询始终返回结果,如果未找到任何结果,则该结果为空。检查长度后,您可以判断点击是否在内部(长度> 0,找到了元素)或外部(长度=== 0,未找到任何元素)

答案 1 :(得分:1)

这是一个细分:

第1行:     $(document).on('click',function(event){...});

绑定文档(DOM)中的任何单击。使用你解除绑定(.off('click',.....);使用它之后。否则它会在每次点击时无休止地执行。

第2行:

if (!$(event.target).closest('#menucontainer').length) {

event.target ===(等于)在dom中单击的元素。

.closest('#menucontainer')=通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。含义:当点击里面 MenuContainer时,它将返回一个带有第一个'#menucontainer'元素的数组。当单击外部时,MenuContainer将返回一个Empty数组。 (没有找到元素)。

.length = JQuery的默认行为是在找不到任何内容时返回一个空数组。如果在If语句中放入并清空数组,它将返回true。因为它是一个定义的对象。它被定义为一个数组。但数字0 == false。他们把.length放在阵列上。当它为空时,它将返回0(假)。 0(true)当它找到一个元素时。

  

在JavaScript中,一切都是“真实的”或“虚假的”,对于数字0(和NaN)意味着错误,其他一切都是真的。

检查NickG他的链接(Is there an "exists" function for jQuery?

答案 2 :(得分:0)

jQuery选择器将返回一个包含所有匹配元素的数组。如果您使用ID作为选择器,例如('#menucontainer'),则长度将为0或1.如果我们点击菜单之外的某些内容,则无法找到最近的菜单,否定将为真,菜单可以隐藏。

 // Get the current clicked element
!$(event.target)
// Get closest container with this id, bubbling up the DOM
.closest('#menucontainer')
// returns 1 if we clicked something inside the menu and 0 if we clicked something outsite
.length