JavaScript имеет только область действия , а не "область фигурных скобок". Если вы хотите быть очень правильным, вы должны поместить все объявления вверху функции:
$("#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;
}