【发布时间】:2016-10-31 20:11:52
【问题描述】:
我想要达到的目标
我的页面上有一个按钮和一些画布元素,当我单击该按钮或画布元素时,覆盖 div (#add-elements) 将滑入。当我单击其他位置时(不在覆盖上div,而不是按钮而不是画布元素)覆盖 div 将消失。使用 Firefox 和 IE,使用 jQuery 的 closest() 的解决方案可以正常工作:
if (!$(event.target).closest('#add-elements').length
&& !$(event.target).closest('#show-button-wrapper').length
&& !$(event.target).closest('.gui-element').length) {
hideEditPanel(); // this hides the overlay div
}
现实问题
但是在 Chrome 中,即使我单击按钮,hideEditPanel() 也会被调用。我做了一些控制台输出,!$(event.target).closest('#show-button-wrapper').length 在 Chrome 中是 true,但在 Firefox 和 IE 中是 false。
我的 DOM 结构
<html>
<head>
</head>
<body>
<div id="page">
<div id="main">
<div id="content">
<div id="add-elements">
</div>
<div id="show-button-wrapper">
<button id="show-button">show panel</button>
</div>
<div id="bigcanvas">
<canvas id="first" class="gui-element"></canvas>
</div>
</div> <!-- #content -->
</div> <!-- #main -->
</div> <!-- #page -->
</body>
</html>
任何帮助将不胜感激。
更新
event.target 在 Chrome 中是 <span class="ui-button-text">,在 Firefox 中是按钮元素本身。当我单击 Chrome 中按钮的边缘时(强制目标成为按钮元素,而不是内部的跨度),它似乎可以工作。
【问题讨论】:
-
为什么在 ID 上使用最接近的。 ID 必须是唯一的。请点击编辑器中的
<>按钮并发布[mvce] -
直接访问ID更快,更简单
-
如何检查被点击的父元素之一是否有特定的ID?
标签: javascript jquery cross-browser