使用长度属性获取事件目标时出现混淆
Confusion in using length property to get the event target
所以,我正在浏览这篇关于使用停止事件传播时的危险的文章。在描述除了使用stopPropagation
之外还可以做什么的部分中,显示了以下代码:
$(document).on('click', function(event) {
if (!$(event.target).closest('#menucontainer').length) {
// Hide the menus.
}
});
我在这里没有得到的是为什么在语句中使用length
属性?是不是足够的closest
来确定是否点击元素是事件目标?
因为.close()总是返回一个真实的jQuery对象,所以如果只是检查.closest
返回的值,它将永远不会满足条件。
jQuery对象的length属性将返回它所引用的dom元素的个数,所以为了检查最近的是否在e.target
的祖先树中找到了目标元素,我们可以检查length属性。如果没有找到匹配的元素,length
将为0,否则它将包含找到的引用数
这是一个非常常用的'hack'(我可以说习语,如此广泛)。比起检查数组的大小是否大于零,你可以通过依赖JavaScript对象的真假属性来缩短代码。
if (array.length > 0) {
// do something
}
和
是一样的if (array.length) {
// do something
}
该谓词为真,当array
不为false时,它设置了length
属性,且其值不为false (false
、0
、NaN
、null
、undefined
为false)。
在这种情况下,我们不是使用数组,而是使用NodeList,但它有一个长度,所以原理是一样的。
相关文章:
- Javascript事件.锚的目标问题
- Firefox事件.目标问题
- AngularJs的ng-click$事件将子元素作为目标传递
- 在放置目标时,输入并离开自定义事件
- 在事件目标上,将css波浪号从element1添加到element2
- 修改鼠标事件对象的“目标”以进行事件委派
- 如何切换浏览器事件目标
- 如果放置目标被完全占用,则不会触发HTML5-拖放-ondragover事件
- 捕获给定类型的所有事件,而不考虑气泡/目标
- 无法让悬停事件使用 jQuery UI 持续时间参数或 CSS 处理目标元素的同级元素
- 通过事件目标,我怎么知道它是复选框还是无线电
- 从嵌套函数中选择事件目标
- 如何从子元素中删除数据目标和数据切换,或禁止元素触发事件
- 如何在 Javascript onbeforeunload 事件中获取网页上链接的目标 URL
- 如何获取锚标记的事件目标
- 允许对目标事件执行默认操作,并阻止对父级执行默认操作
- 如何在jQuery中获得元素(而不是目标)事件
- Event和Event之间的区别是什么?目标,事件.toElement和Event.srcElement
- 尝试从目标事件获取数据时,IE8出现问题
- 跨浏览器等效于 显式原始目标事件参数