解决方法
我不喜欢使用stopPropagation的解决方案,因为我经常使用事件冒泡来管理各种链接.如果盒子存在,我不想担心他们可能会停止工作.我的选择看起来像这样:
var $Box = $('#Box'); $(document.body).click(function(){ if (!$Box.has(this).length) { // if the click was not within $Box $Box.hide(); } });
has
函数只过滤选择并返回元素,只要它们包含作为参数传递的元素(您也可以使用选择器字符串,但这里不相关).如果单击位于框外,则长度将为0,因此条件将通过,框将被隐藏.
这应该通过设置一个布尔值来优化,该值是否当前框是可见的,如果当前可见,则仅执行has调用.