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

为什么这个JavaScript if语句总是返回true?,javascript,jquery,if-statement,Javascript,Jquery,If Statement,我试图在第一次单击div时执行一个代码块,然后在第二次单击时执行另一个代码块。我的警报显示变量正在第一个代码块内更改,但第一个代码块始终执行 如果手动更改变量,则可以执行第二个块 var clickCount = 0; // code for first click if ( clickCount === 0 ){ $( '.link' ).click(function(){ alert( 'first

我试图在第一次单击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
            });
        }
你的密码是:

If the variable is 0
attach a click handler to the link which fires every time the link is clicked
即使变量已更改,该单击处理程序仍保持不变。条件只计算一次,单击处理程序只附加一次,但这就是以后每次单击链接时继续触发附加的单击处理程序所需的全部内容

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

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

var clickCount = 0;

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

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

这应该适合您:

var clickCount = 0;

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

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

提示:这并不总是正确的。它测试过一次。@Jan Dvorak第二次单击时没有测试吗?第二个if语句将在第一个if语句之后执行,因此clickCount仍然为0。也许可以尝试将===更改为==…当计算条件时,clickCount为0,以便只注册第一个处理程序,而不注册第二个处理程序。