0

我正在使用一个坐标系表,并在每个 td 元素中使用一个函数来更新字段值。

[ ][ ][X][ ]
[ ][X][X][X]
[X][ ][ ][ ]

当我单击一个空元素时,我希望它在我的数据库中将值设置为“X”,方法是从我的 rails 应用程序获取新的部分数据(并发送 GET 变量),然后重新渲染表。使用我的 rails 应用程序可以正常工作,但只有一次。似乎 jQuery 函数 .click() 只运行一次。该函数如下所示:(通过.coffeescript生成

$(document).ready(function() {
  $(".field").click(function(e) {
    $.get("http://localhost/dinners?ap="+$(this).attr('id'), function(data) {
      $("#dinner_table").html(data);
    });
  });
});

这将运行得很好,一旦我单击一个元素,它将在表中呈现新数据 - 但只有一次!如果我在函数中交换 HTML 后重新定义 .click() 函数,它允许我单击(并更新)两次,等等。

我很确定这是一个基本问题,但到目前为止搜索没有运气。

4

2 回答 2

6

委托事件。通过这样做,您只需附加一次处理程序。

$(".field").click(function(e) {  

会变成:

$("body").on('click', '.field', function(e) {

body可以用任何静态父容器替换。

于 2012-11-06T20:44:51.607 回答
5

使用事件委托:

$( '#dinner_table' ).on( 'click', '.field', function () {
    /* your click handler */
});

因此,单击处理程序绑定在共同祖先(在本例中为 TABLE 元素)上。

于 2012-11-06T20:44:59.843 回答