2013-04-04 88 views
0

我希望有人能幫助我,因爲我無法弄清楚這一點。 我有一張顯示用戶名的表格。當我點擊一個TR行時,它通過ajax請求將信息提取到一個PHP頁面,該頁面從SQL獲取內容並將其傳遞給表單。jquery,DOM操作後無法選擇TR

當表單被更新並保存時發生了反轉,由ajax發送到PHP頁面,女巫更新SQL。

然後,當更新完成後,我希望列表更新它自我而不刷新頁面。我得到了這個工作。它通過ajax/php從數據庫中提取新保存的內容,然後使用.append填充表。

但問題是當表更新時,不可能再選擇表中的TR。

這是莫比混淆的解釋..

我已經檢查了DOM的外觀前後的變化(與科達/ DOM樹)後,它們是相似的,至少在我的眼前:

前MANUPULATION:

<table id="brukere" cellpadding="8"> 
<thead> 
    <tr><td>Brukernavn</td></tr></thead> 
<tbody> 
<tr id="1" onmouseover="changebgcolor(this)" onmouseout="restorebgcolor(this)"  style="background-color: white; "> 
    <td>Name 1</td> 
</tr> 
<tr id="2" onmouseover="changebgcolor(this)" onmouseout="restorebgcolor(this)" style="background-color: white; "> 
    <td>Name 2</td> 
</tr>  
</tbody> 
</table> 

操作之後:

<table id="brukere" cellpadding="8"> 
<thead> 
    <tr><td>Brukernavn</td></tr></thead> 
<tbody> 
<tr id="1" onmouseover="changebgcolor(this)" onmouseout="restorebgcolor(this)"> 
    <td>Name 1</td> 
</tr> 
<tr id="2" onmouseover="changebgcolor(this)" onmouseout="restorebgcolor(this)"> 
    <td>Name 2</td> 
</tr> 
</tbody> 
</table> 

我使用的工作之前,DOM操作到選擇TR的代碼是:

$("#brukere tr") 
     .click(function() { 

要刷新表我先清除TR`s:

$("#brukere").find("tr:gt(0)").remove(); 

而且然後追加,新的內容(數據)來作爲HTML從PHP文件:

$("table tbody").append(data), 

回答

4

那麼,當你做

$("#brukere").find("tr:gt(0)").remove(); 

您刪除了tr以及其單擊處理程序。所以,你要麼需要事後附加一個新的單擊處理程序(到新插入的元素),或者你需要使用一個委託,它不會被刪除的元素,如:

$("#brukere").on('click', 'tr', function() {...}); 

這將附上click處理程序到#brukere表。但是,只有當點擊源自小孩tr時,匿名功能纔會被執行。既然你永遠不會刪除表本身,那個點擊處理程序永遠不會被刪除。

+0

啊哈,我明白你的意思了!我將如何格式化這個我有的? \t $( 「#brukere TR」) \t。點擊(函數(){ \t \t $阿賈克斯({ – SpanTag 2013-04-04 18:08:14

+0

就像我給你上面:'$( 「#brukere」)上( '咔噠'。 'tr',function(){$ .ajax(...);});' – Steve 2013-04-04 18:09:30

+0

完美!我希望我以前問過,會救我的日子抓我的頭!謝謝你:) – SpanTag 2013-04-04 18:11:52