2014-07-17 41 views
0

我正在製作一個動態表系統,可以通過在一行變空時更改行來添加行。我的問題是新添加的行對我的事件處理程序是「不可見的」。 這是我的事件處理程序:任何人都知道爲什麼我的jQuery不會在我的html表中找到新插入的行嗎?

$('tr td ').on('blur', 'input.autoupdate',function(event){ 
    event.stopPropagation(); 
    event.preventDefault(); 
    rid = $(this).closest('tr').attr('id'); 
}); 

$('tr td ').on('focus', 'input.autoupdate',function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    newid = $(this).closest('tr').attr('id'); 
    check(); 
}); 

這裏是我的功能添加行:

var table_row = "<tr><td><input></td></tr>"; 
    $(table_row).appendTo('#auto_insert'); 

誰能告訴我什麼,我做錯了什麼?

回答

1

這是要去解決您的問題:

$(document).on('blur', 'tr td input.autoupdate',function(event){ 
    event.stopPropagation(); 
    event.preventDefault(); 
    rid = $(this).closest('tr').attr('id'); 
}); 
$(document).on('focus', 'tr td input.autoupdate',function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    newid = $(this).closest('tr').attr('id'); 
    check(); 
}); 

問題是:

您的TRS和TDS動態添加,爲此他們有沒有事件偵聽器正在偵聽發生在它們上面的事件,這就是如何在動態添加的元素上設置事件偵聽器。

0

,這是由於DOM的頁面

$(document).on('blur', 'tr td input.autoupdate',function(event){ 
event.stopPropagation(); 
event.preventDefault(); 
rid = $(this).closest('tr').attr('id'); 
}); 

$(document).on('focus', 'tr td input.autoupdate',function(e){ 
e.stopPropagation(); 
e.preventDefault(); 
newid = $(this).closest('tr').attr('id'); 
check(); 
}); 
0

要綁定的事件處理程序上無法識別新添加的元素只存在<tr><td>。它不適用於新腳本,因爲腳本運行時它們不存在。

您需要將事件處理程序綁定到當前存在於DOM中的元素。 綁定處理程序的<table>相反,如

$('table').on('blur', 'tr td input.autoupdate',function(event){ 
0

您正在使用委託的事件,這是正確的,但你需要做的首要選擇,您可在DOM負載的元素,它的tr td元素不。嘗試,而不是綁定到table元素:

$('table') 
    .on('blur', 'input.autoupdate', function(event) { 
     // your code... 
    }) 
    .on('focus', 'input.autoupdate', function(e) { 
     // your code... 
    }); 
相關問題