我是javascript新手,所以请帮助我了解我的问题。

setTimeout(function() {
    var wide = false;
    if(wide = false) {
        document.querySelector(".some-class").onclick = function() {
            document.querySelector("#some-id").className += " MyClass";
            wide = true;
        };
    }
    else {
        document.querySelector(".some-class").onclick = function() {
            document.querySelector("#some-id").className =
            document.querySelector("#some-id").className.replace(/\bMyClass\b/,'');
            wide = false;
        };
    }
}, 1000);


这不起作用(不添加MyClass)。但是,如果我只使用这个:

setTimeout(function() {
document.querySelector(".some-class").onclick = function() {
document.querySelector("#some-id").className += " MyClass";
};
}, 1000);


然后工作正常。那么我的代码有什么问题呢?

PS:
谢谢。这是我得到的:

setTimeout(function() {
    var wide = false;
    if(wide == false) {
        document.querySelector(".some-class").onclick = function() {
            document.querySelector("#some-id").className += " MyClass";
            wide = true;
        };
    }
    else {
        document.querySelector(".some-class").onclick = function() {
            document.querySelector("#some-id").className =
            document.querySelector("#some-id").className.replace(/\bMyClass\b/,'');
            wide = false;
        };
    }
}, 1000);


它起作用了,但是现在它仅在每个onclick事件上添加MyClass,而不是将其删除。我试图与elseif一起玩,并尝试将wide = flasewide = true移到onclick事件之外,但这是相同的。

最佳答案

问题是您有:if (wide = false) {...
这会将wide设置为等于false,而不是比较值。

要比较值,请使用=====


单等号->定义/设置变量。
Double equals->比较类型转换。例如:("2" == 2) // true
三重等于->比较,不进行类型转换。例如:("2" === 2) // false


对于您的问题,可以使用双倍或三倍等于。

09-26 16:22