变量范围如何在jquery中起作用?

时间:2010-12-11 17:06:01

标签: javascript jquery scope

var change = 1;

$("#game").click(function (e) {
    if (change == 1) {
        var data = $(e.target).closest("td").text();
        var p1 = $("#player1").val();
        var p1_value = p1 + data;
        $("#player1").val(p1_value);
        change = 2;
    } else(change == 2) {
        var data = $(e.target).closest("td").text();
        var p2 = $("#player2").val();
        var p2_value = p2 + data;
        $("#player2").val(p1_value);
        change = 1;
    }

});

这是写的写方式吗?顺便说一下,它不会进入else循环。

2 个答案:

答案 0 :(得分:1)

如果您打算使用此条件,则else应为else if

if (change == 1) {
    // ...
} else if(change == 2) {
    // ...
}

作为一个更好的选择,您可以使用jQuery的.toggle(),并将两个函数传递给点击。

$("#game").toggle(function(e) {
            var data = $(e.target).closest("td").text();
            var p1 = $("#player1").val();
            var p1_value = p1 + data;
            $("#player1").val(p1_value);
 }, function(e) {
            var data = $(e.target).closest("td").text();
            var p2 = $("#player2").val();
            var p2_value = p2 + data;
            $("#player2").val(p1_value);
 });

答案 1 :(得分:1)

JavaScript只有function scope,而不是“大括号范围”。如果你想要非常正确,你可以将所有声明放在函数的顶部:

$("#game").click(function(e) {
    var data = '',
        p1 = '',
        p1_value = '',
        p2 = '',
        p2_value = '';

        if (change == 1) {
            data = $(e.target).closest("td").text();
            p1 = $("#player1").val();
            p1_value = p1 + data;
            $("#player1").val(p1_value);
            change = 2;
        }
        else if (change == 2) { // you forgot `if`
            data = $(e.target).closest("td").text();
            p2 = $("#player2").val();
            p2_value = p2 + data;
            $("#player2").val(p1_value);
            change = 1;
        }
});

至少JSLint抱怨data已经定义。

但你可以用另一种方式优化(并缩短!)你的功能:

$("#game").click(function(e) {
    var $player = $('#player' + change);
    $player.val($player.val() + $(e.target).closest("td").text());
    change = (change === 1) ? 2 : 1;
}