У меня проблема с 3 днями, поэтому проблема заключается в том, что когда я перемещаю кусок, он обновит доску так, чтобы ai мог двигаться, после обновления на доске функция нажатия перестала работать.
function drawBoard(board) {
var str = '';
for( var x = 0 ; x < 8 ; x++ ){
for( var y = 0 ; y < 9 ; y++ ){
str += '<div id="mydiv" class="cell" data-square="'+ x +","+ y +'">' +
'<div class="'+checkPiece(board[x][y]) +' '+ getPieceName(board[x][y]) + '" data-value="' + board[x][y] + '"></div>' +
'</div>';
}
}
$('#board').html(str);
}
После того, как я снова вызову drawBoard (доска); для перерисовки доски функция нажатия перестанет работать.
Проблема заключается в том, как вы настраиваете обработку событий:
$('.blue').each(function (index, div) {
$(div).click(function() {
будет только подключать divs с blue
классом, которые существуют прямо в этот момент. Любые divs, динамически добавленные позднее, не будут подключены к этому событию.
Вам необходимо использовать делегированную обработку событий. Самое простое, наивное, наименее эффективное решение - это сделать
$(document).on('click', 'div.blue', function(){ ...
Просто отметьте, что
$(document).on('click',
является немного печально известным, поскольку, поскольку он вызывает все события кликов в любой точке страницы, чтобы пузыриться и быть проверены. Если ваш дом настроен таким образом, что все эти div всегда будут в своем контейнере, вы можете и должны настроить обработку событий оттуда. Например, если все эти divs находятся в контейнере с именем "foo", вы должны настроить свой обработчик следующим образом:
$('#foo').on('click', 'div.blue', function(){ ....
Функция $.click работает только с объектами, которые существуют при первом вызове.
Поскольку вы привязываете его к div и затем вытираете их вызовом.html(), новые divs не имеют привязанного к ним события щелчка.
Вместо этого используйте $.on и привяжите его к более крупному объекту доски.
$("#board").on("click", "div", function () {
//your click code here
});
Это гарантирует, что события щелчка привязаны к любым будущим div, размещенным внутри доски.