jquery检查id始终转到else

时间:2014-05-26 09:25:46

标签: javascript jquery

这是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 你可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

.has()返回一个jQuery对象;当在if条件内使用时,即使包含零元素,它也总是计算为true。并且不要混淆自己,它会返回真或假,与.hasClass() / .is()

相同

尝试,

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

DEMO

答案 1 :(得分:2)

我更喜欢这个,更快的IMO:

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

$.closest函数将通过层次结构(从下到上)停止在匹配选择器的第一个父级。

您修改后的JSFiddle