如果 checbox/disable 元素无法正常工作

If checbox/disable element not working properly

我正在尝试制作一个脚本,这样如果您 check/uncheck 一个复选框输入,它将 enable/disable 一个目标输入文本框。我的代码 if 语句似乎无法正常运行,有时会同时触发两个 if,有时则根本不会触发。我已经完成调试并尝试了多种变体,但仍然无法正常工作。这是我所拥有的,非常感谢任何帮助!

function disable(elem) {
    var obj = document.getElementById(elem);
    status = obj.disabled;
    console.log(status);
    if (status = true) {
        console.log("test");
        obj.disabled = false;
        obj.style.backgroundColor = "white";
    }
    if (status = false) {
        console.log("test2");
        obj.disabled = true;
        obj.style.backgroundColor = "bfbfbf";
    }
}

由于多种原因,此代码未表现出正确的行为。

第一个原因是您的 if 语句是内联的,而不是 if-else 形式。比较好的组织如下:

function disable(elem) {
    var obj = document.getElementById(elem);
    status = obj.disabled;
    console.log(status);
    if (status == true) {
        console.log("test");
        obj.disabled = false;
        obj.style.backgroundColor = "white";
    } else {
        console.log("test2");
        obj.disabled = true;
        obj.style.backgroundColor = "#bfbfbf";
    }
}

这意味着即使您正在检查的变量在块中的代码正在执行时发生变化,无论其新值如何,它都不会执行相对块中的代码。如您所见,如果在第一个 if 语句中的代码为 运行ning 时更改值,则两个控制块都可能变为 运行.

它运行不正常的第二个原因是您的 if 语句中的语法不正确。您当前正在使用 = 运算符,这意味着将变量设置为您要检查的内容。如果要以这种方式编写它们,则必须使用 ===== 相等性检查(后者是类型严格的)。更好的方法是通过检查值是否为真来完全省略该运算符,如下所示:

function disable(elem) {
    var obj = document.getElementById(elem);
    status = obj.disabled;
    console.log(status);
    if (status) {
        console.log("test");
        obj.disabled = false;
        obj.style.backgroundColor = "white";
    } else {
        console.log("test2");
        obj.disabled = true;
        obj.style.backgroundColor = "#bfbfbf";
    }
}

这应该会为您提供预期的控制行为 :) 如前所述,请确保正确设置值的格式(例如“#bfbfbf”而不是 "bfbfbf")