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

Why does the value of a boolean change after stepping out of a function?

本文关键字:变化 函数 布尔值 退出 为什么      更新时间:2023-09-26

单击class属性包含"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");
    }

您应该在单击处理程序中移动两个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");
    }
});

最后两个if测试是在点击事件处理程序之前运行的,因此disabled的值当时还没有更改。

只有单击"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");
    }
});

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

问题有两个方面。

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

其次,如果类字符串是'disabled selected',那么if ($(this).attr("class") == "disabled selected") {只会得到一个"truthy"值。如果类字符串是'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");
    }
});