这是jfiddle
http://jsfiddle.net/Vp942/1/

我有一个div campaignDiv
当用户单击它的侧面时,我想隐藏它。

这就是我尝试过的

$(document).bind('click', function (e) {
    var $clicked = $(e.target);
    if (!$clicked.parents().has("#campaignDiv")) { $("#campaignDiv").hide(); } else { console.log("asdf");}
});


但是由于某些原因,即使我在else中单击,也总是执行campaignDiv

你能帮忙吗?

最佳答案

.has()返回一个jQuery对象;在if条件内使用时,即使包含零个元素,它始终会评估为true。并且不要混淆自己,它将返回与.hasClass() / .is()相同的true或false

尝试,

$(document).bind('click', function (e) {
    var $clicked = $(e.target);
    if (!$clicked.parents().find("#campaignDiv").length) {
        $("#campaignDiv").hide();
    } else { console.log("asdf");}
});


DEMO

09-20 08:30