2017-03-20 28 views
1

我有event.preventDefault()的問題,因爲事件不會停止。event.preventDefault()不工作,如果通過js添加鏈接

我有兩個不同的功能。第一個函數是xhrCall並顯示所有帖子並將結果附加到表中。在這個函數中,我創建了class =「del」和href =「#」的鏈接。

$.each(data, function(i, data){ 
    $('#listMsg').append('<tr><td>' + data.id + '</td><td>' + data.msg + '</td><td><a class="del" rel="'+ data.id + '" href="#"> delete</a></td></tr>'); 
}); 

我的下一個功能是處理刪除。

$(". del").click(function(e) { 
    e.preventDefault(); 
    var id = $(this).attr('rel') 
    alert('delete + ' + id); 
}); 

如果我將鏈接直接複製到我的index.php文件中並且具有相同的類,則代碼可以正常工作!

不幸的是,我不知道我錯過了什麼或者如何與插入js的鏈接交談。

非常感謝您的幫助!

+0

你想實現什麼? – JohanP

+0

從過去的經驗,我發現alert()往往會打破Ajax響應,因爲瀏覽器等待你的'OK'繼續前進,但響應早已消失。再試一次,但使用console.log()代替。只是一個暗示,已經有一段時間了。 –

+0

你使用的是什麼版本的jquery? – garek007

回答

2

你是不是說你正在用ajax添加鏈接?如果是這樣,你需要做的是這樣的:

$("#listMsg").on("click", ".del", function(e) { 
    e.preventDefault(); 
    var id = $(this).attr('rel') 
    alert('delete + ' + id); 
}); 

如果jQuery是1.7版本或以上這樣來做

$("#listMsg").delegate(".del", "click", function(e) { 
    e.preventDefault(); 
    var id = $(this).attr('rel') 
    alert('delete + ' + id); 
}); 
+0

或者OP可以使用'#listMsg'而不是'body'來保持處理器更接近所討論的元素。 – nnnnnn

+0

是的。這有什麼優勢嗎?我總是隻用身體,因爲我知道總會有身體。你的方式更快嗎? – garek007

+0

@ garek007它不只是更快,它也更安全=)) – Hopeless

相關問題