2010-05-20 42 views
2

那麼你在這個表格中的一行中編輯我在focusout上創建它假設用更新的數據重新加載整個行,事情是在第一次加載後觸發事件停止工作所以在第一個之後完成的任何更改都不會被保存。觸發事件不能在ajax中加載html

我目前使用此代碼

$(function() { 
     $.ajaxSetup ({ 
      cache: false 
     }); 
    $("td input").focusout(function() { 
     var defval = $(this).attr('title'); 
     var value = $(this).attr('value'); 
     var column = $(this).closest('td').attr('class') 
     var user = $('input[type=hidden]').attr('value'); 
     var row = $(this).closest('tr').attr('id') 
     if(defval == value){ 
     var state = 'Good Standing.'; 
     }else{ 
     var state = 'Will update spread sheet...'; 
     var loadUrl = "./ajax/update.php"; 
     $('#'+row+'').load(loadUrl, {row: row, user: user, column: column, value: value}); 
     } 
    }); 
}); 

,目前該行看起來像這樣

<tr class="numbers" id="3"> 
<td class="a" align="right">3</td> 
<td class="b"><input class="input" type="text" title="1750" value="1750"/></td> 
<td class="c"><input class="input" type="text" title="2100" value="2100"/></td> 
<td class="d"><input class="input" type="text" title="0" value="0"/></td> 

<td class="e"><input class="input" type="text" title="0" value="0"/></td> 
<td class="f">3.5</td> 
<td class="g"><input class="input" type="text" title="0" value="0"/></td> 
</tr> 

任何的幫助我會得到它是極大的讚賞

問候

回答

4

使用事件代表團(livedelegate):

// using .live 
$("td input").live("focusout", function() { 
    ... 

// using .delegate 
$("table td").delegate("input", "focusout", function(){ 
    ... 

如果您將處理器如上,基本上你是:

附加一個處理程序的事件 當前 選擇現在或將來匹配這,所有的元素。

換句話說,ajax替換元素將繼續觸發最初綁定到他們的事件。

+0

如果這個工作不好親吻雅:P – Breezer 2010-05-20 22:17:54

+0

OMG它的工作原理:D 你會介意告訴我的不同嗎? – Breezer 2010-05-20 22:18:56

+0

你應該閱讀兩種方法的文檔(上面鏈接),我也編輯了我的答案。 – karim79 2010-05-20 22:22:48