javascript - 如果用户在 div 外部单击,如何隐藏 div?

标签 javascript jquery html hide

我有一个按钮,点击它会改变 div 的可见性:

<button type="button" id="editbutton" onclick="plus()" alt="Edit"></button>

function plus() {
var f = document.getElementById('edit');
if (f.style.visibility == 'hidden') {
   f.style.visibility = 'visible';
   }
else
    f.style.visibility = 'hidden';
}

这很好用。但现在我想添加功能,以便如果用户单击 div 之外的任何地方,div 将恢复隐藏状态。

最初我尝试了自己的方法,但没有成功,因为每当我单击按钮使 div 可见时,它又被新代码隐藏了。我查看了其他人发布的一些 jQuery 示例,但是我尝试过的都没有解决这个问题。任何帮助我将不胜感激。

编辑:澄清一下,问题是因为 div 最初是通过用户单击按钮显示的,所以每当我单击按钮时,div 都会显示但立即再次隐藏,因为这算作单击页面正文。

最佳答案

当用户在您的 div 中单击时,您可以从单击事件处理程序中对该事件调用“e.stopPropagation()”——这将阻止该事件在 DOM 中“冒泡”。

然后,如果您将事件处理程序附加到监听点击的 BODY 元素,则可以使用该事件处理程序来隐藏 DIV;知道点击 DIV 本身不会将事件冒泡到 BODY 处理程序。

以这种方式,任何点击另一个元素,除非处理程序也调用 stopPropagation(),否则将被您的处理程序捕获。因此,如果在其他情况下您不希望 div 隐藏,您可以根据需要调用 stopPropagation() 来阻止它发生。

例如:

$("#edit-button").click( function(e) {
    $("#edit").toggle();
    e.stopPropagation();
});

$('#edit').click(function(e) {
    e.stopPropagation();
});

$("body").click( function(e) {
    $("#edit").hide();
});

关于javascript - 如果用户在 div 外部单击,如何隐藏 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878041/

相关文章:

javascript - 从 vuex 模块中监听 Action /突变

javascript - Ajax 调用一直给我 "internal server error 500"

html - 通讯设计发送电子邮件,使用表格或无表格

javascript - 如何增加下拉菜单的高度?

javascript - Typeahead.js/Bloodhound 只显示一个结果

javascript - 如何从 JavaScript 对象中删除属性?

javascript - polymer 事件目标

c# - Razor if 语句的奇怪结果

javascript - 当值由该站点中的 javascript 设置时如何从外部网站获取值

javascript - 将属性添加到 Grape Js 中的子元素?