代码之家  ›  专栏  ›  技术社区  ›  Sauce

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

  •  -1
  • Sauce  · 技术社区  · 12 年前

    我试图在第一次单击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 回复  |  直到 12 年前
        1
  •  5
  •   deceze    12 年前

    您的代码显示:

    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
        }
    });
    
        2
  •  4
  •   dfsq    12 年前

    这应该对您有用:

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

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