2014-01-15 42 views
0

我試圖在將單擊事件重新附加到列表項的第三個標記(刪除)後,通過ajax添加列表項後獲取父元素的標識。結構如下所示:使用委託事件獲取父元素?

<ul id="list"> 
    <li id="list_23"> 
     <a href="javascript:;">Title</a> 
     <a href="javascript:;">Edit</a> | <a href="javascript:;">Delete</a> 
    </li> 
<ul> 

的JavaScript是:

$('#list li').on("click", 'a:nth-child(2)', function(event) { 
    event.preventDefault(); 
    id = $(this).parent().parent().attr('id'); 
    console.log(id); 
}); 

我試圖讓列表項ID(下稱「list_23」),點擊一個鏈接時,第三,之後元素通過ajax添加。

+2

你不委託事件。 – undefined

+0

另外,看着你的代碼('.parent()。parent()')和「list_23」的預期結果,你會向上走一個超出你需要的節點。 –

+0

對不起,我更新了代碼。問題是,它不能在ajax之後工作,所以事件不會被重新連接。它適用於ajax之前的列表項。就像我無法從ajax之後的鏈接中跋涉父母? –

回答

1

這不是用.on()編寫委派事件的正確方法。而不是嘗試以下操作:

$('#list').on('click', 'li a:nth-child(3)', function(event) { 
    event.preventDefault(); 
    id = $(this).parent().attr('id'); 
    console.log(id); 
}); 

.on()文檔的jQuery專門this部分。

編輯:更新我的答案基於li項目是動態添加到DOM的元素。

編輯2:問題是:nth-child(n)選擇器不是基於零的索引,而是它是一個索引的基礎。增加了工作JSFiddle。

的jsfiddle:http://jsfiddle.net/wyze/vTkYf/

+0

我正在嘗試這個例子,但無法讓它工作 - 該id在ajax之後未定義。在ajax之前工作正常。 jQuery版本是2.0.3。 –

+0

使用正確的代碼與工作的JSFiddle一起更新了答案。 –