Dib*_*ish 16 html javascript events click
我有一个id ="content-area"的div,当用户点击这个div之外时,我想提醒他们他们点击它之外的事实.我如何使用JavaScript来解决这个问题?
<div id = "outer-container">
<div id = "content-area">
Display Conents
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
jol*_*elj 22
看看这个小提琴,看看你是不是想要的!
document.getElementById('outer-container').onclick = function(e) {
if(e.target != document.getElementById('content-area')) {
document.getElementById('content-area').innerHTML = 'You clicked outside.';
} else {
document.getElementById('content-area').innerHTML = 'Display Contents';
}
}
Run Code Online (Sandbox Code Playgroud)
But*_*ak3 12
将onClick-Event绑定到内容区域之外的元素,例如正文.然后,在事件内部,检查目标是内容区域还是内容区域的直接或间接子项.如果没有,那么提醒.
我做了一个功能,检查它是否是一个孩子.如果节点的父节点是搜索的父节点,则返回true.如果没有,则检查它是否确实有父.如果没有,则返回false.如果它有一个父节点,但它不是搜索到的父节点,它会检查父节点的父节点是否是搜索到的父节点.
function isChildOf(child, parent) {
if (child.parentNode === parent) {
return true;
} else if (child.parentNode === null) {
return false;
} else {
return isChildOf(child.parentNode, parent);
}
}
Run Code Online (Sandbox Code Playgroud)
另请查看实例(内容区域=灰色)!
所述Node.contains()方法返回一个布尔值,表示节点是否是一个给定的节点的后代或不
您可以使用捕获事件
document.addEventListener("click", clickOutside, false);
function clickOutside(e) {
const inside = document.getElementById('content-area').contains(e.target);
}
Run Code Online (Sandbox Code Playgroud)
请记住删除在正确位置收听的事件
document.removeEventListener("click", clickOutside, false)
Run Code Online (Sandbox Code Playgroud)
我做了一个简单的小js库来为你做这个:
它劫持了原生的addEventListener,创建了一个outclick事件,并且在.onoutclick的原型上也有一个setter
基本用法
使用outclick,您可以在DOM元素上注册事件侦听器,以检测是否单击了该元素或其中的另一个元素的另一个元素.最常见的用途是菜单.
Run Code Online (Sandbox Code Playgroud)var menu = document.getElementById('menu') menu.onoutclick = function () { hide(menu) }这也可以使用addEventListener方法完成
Run Code Online (Sandbox Code Playgroud)var menu = document.getElementById('menu') menu.addEventListener('outclick', function (e) { hide(menu) })或者,您也可以使用html属性outclick来触发事件.这不处理动态HTML,我们还没有计划添加它
Run Code Online (Sandbox Code Playgroud)<div outclick="someFunc()"></div>
玩得开心!