为什么布尔值的值在走出函数后会发生变化?

时间:2012-02-08 10:16:17

标签: javascript jquery boolean

在我点击class-attribute包含“disabled selected”的li元素后,disabled获取值“true”,但在执行该函数后,调用最后一个if语句。

    var disabled = false;
    $("li").click(function () {
        if ($(this).attr("class") == "disabled selected") {
            disabled = true;
        }
    });
    if (disabled) {
        alert("disabled is true");
    }
    if (!disabled) {
        alert("disabled is false");
    }

5 个答案:

答案 0 :(得分:4)

您应该在点击处理程序中移动if个语句。

var disabled = false;
$("li").click(function () {
    if ($(this).attr("class") == "disabled selected") {
        disabled = true;
    }
    if (disabled) {
        alert("disabled is true");
    }
    else {
        alert("disabled is false");
    }
});

答案 1 :(得分:1)

如果测试在click事件处理程序之前运行,则最后两个,因此disabled的值尚未更改。

答案 2 :(得分:1)

在单击“li”之前不会调用回调。但是,前面两个'if'语句会立即执行。您需要将它们放在回调中。

var disabled = false;
$("li").click(function () {
    if ($(this).attr("class") == "disabled selected") {
        disabled = true;
    }
    if (disabled) {
     alert("disabled is true");
    }
    if (!disabled) {
     alert("disabled is false");
    }
});

答案 3 :(得分:0)

单击li元素时执行该功能。最初评估脚本时,尚未触发单击事件。

答案 4 :(得分:0)

问题是双重的。

首先,正如几张海报所指出的,您需要将这些if测试放在点击处理程序中。就像现在一样,它们在click处理程序的作用域之外执行,我怀疑它不是你希望它们执行的时候。

其次,if ($(this).attr("class") == "disabled selected") {只会在类字符串为'disabled selected'时为您提供“真实”值。如果类字符串为'selected disabled'(或'otherClass disabled selected''disabled selected draggable'等),那么您将获得因比较而返回的false值。

尝试:

$("li").click(function () {
    var i = $(this); //Multiple variables used for better step-line debugging.
    var hasDisabled = i.hasClass('disabled');
    var hasSelected = i.hasClass('selected');
    var disabled = false;
    if (hasDisabled && hasSelected) {
        disabled = true;
    }
    if (disabled) {
        alert("disabled is true");
    }
    if (!disabled) {
        alert("disabled is false");
    }
});