2012-11-06 28 views
0

我正在使用一個座標系統表,並在每個td元素中使用一個函數來更新字段值。部分數據更新後保留.click()函數

[ ][ ][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()函數,它允許我點擊(並更新)兩次,等等。

我很確定這是一個基本問題,但沒有運氣到目前爲止的搜索。

回答

6

委託事件。通過這樣做你只需要附加一次處理程序。

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

將變爲:

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

body可以用任何靜態父容器進行更換。

+0

從來沒有聽說過這個,但它正是我所期待的。謝謝 –

+1

@AllanNørgaard..很高興有幫助..欲瞭解更多信息,你可以看看這個http://davidwalsh.name/event-delegate –

5

使用事件代表團:

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

因此,點擊處理程序綁定在共同的祖先(TABLE元素,在這種情況下)。