2013-10-16 56 views
0

我从3天开始就遇到了这个问题,所以问题是当我移动一块它会刷新板子,这样ai可能会移动,在板子刷新后点击功能停止工作。jQuery .click函数不能在函数调用后工作

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(board)之后;重新绘制电路板的点击功能停止工作。

Here's the link of JSFiddle

回答

2

的问题是你如何建立事件处理:

$('.blue').each(function (index, div) { 
    $(div).click(function() { 

只会线向上的div与blue类,就在这时存在。以后动态添加的任何div都不会连线到该事件。

您需要使用委托事件处理。最简单,最朴素,最高性能的解决方案是做

$(document).on('click', 'div.blue', function(){ ... 

只需注意

$(document).on('click', 

有点臭名昭著,因为因为它会导致所有点击活动网页的任意位置上冒泡和被检查。如果您的dom设置为使得所有这些div始终位于其自己的容器中,则可以并应该从设置处理的事件。例如,如果所有这些div的是在一个名为“富”的容器中,你将建立您的处理程序是这样的:

$('#foo').on('click', 'div.blue', function(){ .... 
0

的$。单击功能仅适用于存在时,它最初被称为对象。

由于您将它绑定到div,然后用.html()调用清除它们,新的div没有绑定到它们的单击事件。

改为使用$ .on,并将其绑定到较大的板对象。

$("#board").on("click", "div", function() { 
    //your click code here 
}); 

这将确保点击事件绑定到董事会内任何未来divs。