我有一个输入框,它可以成功地切换隐藏的div。但是,我还希望当用户单击除div本身以外的任何东西时,div也隐藏起来。我该怎么做呢?
超文本标记语言
<input id="inputID" type="text" readonly />
<div id="divID"></div>
日本
var divObj = document.getElementById('divID');
var inputObj = document.getElementById('inputID');
inputObj.addEventListener('click', toggleDiv, false);
function toggleDiv(){
divObj.style.display = (divObj.style.display == 'none') ? 'block' : 'none';
}
3条答案
按热度按时间vaj7vani1#
在
document.body
元素上创建一个事件侦听器,检查事件是否来自div中的某个元素,如果不是,则隐藏它。您可以通过不检查事件来源,而只是通过在事件对象上调用.stopPropagation()
来防止div中的单击事件冒泡,从而使这项工作变得简单一些。演示:http://jsfiddle.net/ThiefMaster/D7YnS/
zbwhf8kr2#
让我们看看这是否有效
1.调用普通侦听器隐藏div
1.添加一个额外的侦听器到这身体隐藏您的div如果没有隐藏
另外,请注意上面的代码(您的)和下面的代码(我的)不是跨浏览器的(addEventListener在IE8或更低版本中不起作用)希望您忽略这一点,下面是带JS的HTML
s3fp2yjn3#
ThiefMaster的方法是可行的,但是如果您有多个地方需要做同样的事情,则需要考虑一个小问题:假设您需要对两个单独的div做同样的事情,那么调用
e.stopPropagation()
将导致在单击div2时div1不会隐藏示例
因此,更安全的替代方案是(为了简单起见,我将使用jQuery)http://jsfiddle.net/qzMnj/1/
我的观点是,调用
stopPropagation()
可能会产生不必要的副作用,如果你不必这样做,最好不要这样做,除非你确定没有人会关心那个点击。