为什么这个JavaScript if语句总是返回true?

时间:2014-02-19 12:59:21

标签: javascript jquery if-statement

我尝试在第一次单击div时执行代码块,然后在第二次单击时执行不同的块。我的警报显示变量在第一个块中被更改,但第一个代码块始终执行。

如果我手动更改变量,我可以执行第二个块。

var clickCount = 0;

        // code for first click 
        if ( clickCount === 0 ){
            $( '.link' ).click(function(){
                alert( 'first click. clickCount = ' + clickCount );
                clickCount = 1;                 
            });
        }

        // code for second click 
        if ( clickCount === 1 ){
            $( '.link' ).click(function(){
               alert( 'first click. clickCount = ' + clickCount ); // never executes
                // stuff
            });
        }

2 个答案:

答案 0 :(得分:5)

您的代码说:

If the variable is 0
attach a click handler to the link which fires every time the link is clicked

即使在变量发生变化后,该单击处理程序也会保留在那里。该条件仅被评估一次,并且单击处理程序仅附加一次,但这是在每次单击链接时始终触发附加的单击处理程序所需的全部内容。

永远不会执行第二个块,除非您再次运行附加了点击处理程序的整个代码块。

您可能只想附加一次点击处理程序,然后在该处理程序中检查clickCount的值,并根据其值执行不同的操作。

var clickCount = 0;

$('.link').click(function () {
    alert('clickCount = ' + clickCount);

    if (clickCount === 0) {
        clickCount = 1;                 
    } else {
        // stuff
    }
});

答案 1 :(得分:4)

这应该适合你:

var clickCount = 0;

$('.link').click(function() {
    if (clickCount === 0) {
        alert('first click. clickCount = ' + clickCount);
        clickCount = 1;
    }
    else {
        alert('second and further clicks. clickCount = ' + clickCount);
    }
});

您不需要绑定事件两次。一次就够了。只需检查点击处理程序内部的点击次数并执行相应的代码。