0
我想從委託onclick事件處理程序中檢索元素數據,並使其工作,但突然遇到一些問題。如何將數據從元素傳輸到委託事件?
最後我隔離了這個問題:當元素從DOM中刪除時,似乎附加到元素 的數據被刪除。在委託onclick事件處理程序被調用之前,這可能發生在 。
因爲有時我會有一個單擊事件處理程序,它可以在委託處理程序可以運行之前刪除該元素。
審議本文件:
<div id='content'>
<a href="#pp" class='remove'>Will be removed (data is lost)</a>
<a href="#pp">Will stay (works)</a>
</div>
與此javascript:http://jsfiddle.net/s47c5/4/
我可以張貼-推遲實施拆除的元素,包裝:
$(document).ready(function() {
$('a').data("keep", {
content: 'want to see at delegate click envent'
});
$('a').click(function() {
var data = $(this).data("keep"),
data_to_show = data ? JSON.stringify(data) : 'Real Gone!!';
alert("click: " + data_to_show);
if ($(this).hasClass('remove')) {
$(this).remove();
}
});
$('#content').delegate('a', 'click', function (event) {
var data = $(this).data("keep"),
data_to_show = data ? JSON.stringify(data) : 'Real Gone!!';
alert("delegate: " + data_to_show);
});
});
你可以用它玩它進入超時...
if ($(this).hasClass('remove')) {
setTimeout (function() {
$(this).remove()
}, 10);
}
它的工作原理,但不知何故,這讓我感動!
所以,問題是:
我怎麼能正確地從該項目轉移數據被刪除,從而達到委派的事件處理程序?
@ user2043273看到我已經添加了答案,它正在對givem的jsfiddle。 –
yeap,你的解決方案基本上延遲刪除項目與setTimeout()一樣,並且它比我的解決方法更令人毛骨悚然,但是我不想找到一種方法來保持項目'活着',但要轉移數據通過其他方式。也許將數據附加到事件? )。實際上,我不在這樣的控制下,因爲$(this).remove()實際上嵌套在一些複雜的代碼層下;它甚至可能刪除$('#content'),而不僅僅是元素。 – user2043273