在上面的jsfiddle中,我试图捕获当用户点击.inner div之外但我似乎无法让它工作。
HTML :
<div class="outer">
<div class="inner"></div>
</div>
的Javascript :
$(document).mousedown(function (e) {
var div = $(".inner");
if (div.has(e.target).length === 0) {
alert('clicked outside of .inner');
}
});
CSS :
.outer { width:200px; height:200px; border:1px solid #000; position:relative; }
.inner { width:100px; height:100px; border:1px solid #000; position:absolute; top:25px; left:25px; }
答案 0 :(得分:3)
div
变量引用.inner
元素,因此它没有.inner
子元素。基于标记的结构,has
方法在这里没用。您可以使用is
方法:
$(document).mousedown(function(e) {
if ( !$(e.target).is('.inner') ) {
alert('clicked outside of .inner');
}
});
如果.inner
包含子元素,则上述方法无效,在这种情况下,您可以使用closest
方法:
$(document).mousedown(function(e) {
if ( !$(e.target).closest('.inner').length ) {
alert('clicked outside of .inner');
}
});
答案 1 :(得分:2)
您可以使用jQuery的$.on() / $.bind()(取决于您的jQuery版本)来监听外部mousedown
上的div
事件,同时防止内部div发生反应使用event.stopPropagation()进行mousedown
事件,如下所示:
$('.inner').on('mousedown', function(e){
e.stopPropagation()
});
$('.outer').on('mousedown', function(){
alert('outer');
return false;
});
<强> Update Fiddle Here 强>
我希望这有帮助!
答案 2 :(得分:1)
$(document).mousedown(function (e) {
var div = $(".inner");
if (!$(e.target).is('.inner') && div.has(e.target).length === 0) {
console.log('clicked outside of .inner');
}
});