为什么Jquery .click()会触发多个函数?

时间:2015-08-14 19:07:37

标签: javascript jquery html

我一直在制作游戏来练习编程,而我在使用Jquery .click()函数时遇到了麻烦。我的代码中有两个按钮,即启动按钮和攻击按钮。当我单击开始按钮时,.click()函数也会触发另一个按钮的代码,这会导致我的主菜单冻结而不会绘制游戏画面。我已经为按钮使用了单独的id,但他们似乎都认识到单击开始按钮。我无法让它在JSFiddle中工作,但所有代码都在那里。有人可以告诉我如何使用多个按钮吗?

//start button
$('#startButton').click(function() {
    stage.state = "battle";
    stage.update();
})

//attack button
$('#attack').click(firstTurn());

//attack button code
function firstTurn() {
    console.log("firstTurn Fired");
    if(p1.speed > opp.speed){
        turn = 1;
    } else{
        turn = 0;
    }
    battle();
};

function battle(){
    var battling = 1;
    while(battling == 1) {
        if(turn == 0) {
            p1.health = p1.health-opp.attack;
            $("#textBox").append('<p>'+opp.name+' hit you for '+ opp.attack+' points.</p><br/>');
            draw();
            sleep(1000);
            console.log("attacked");
        } else{
            opp.health = opp.health-p1.attack;
            $('#textBox').append('<p> You hit '+opp.name+' for '+p1.attack+' points.</p><br/>');
            draw();
            sleep(1000);
        }
    }
};

https://jsfiddle.net/memersond/m3gvv8y6/

2 个答案:

答案 0 :(得分:10)

 $('#attack').click(firstTurn());

应该是:

$('#attack').click(firstTurn);

您希望将该函数作为参考传递,而不是立即执行。

答案 1 :(得分:0)

$('#attack').click(firstTurn());

这会导致在启动侦听器时调用firstTurn(),使用其中一个替代方法:

$('#attack').click(firstTurn );

$('#attack').click(function() {
    firstTurn()
});