2011-09-29 50 views
0

任何人都可以向我解釋發生了什麼事?錯誤與jquery.live()?

http://jsfiddle.net/K5yvp/2/

所以,以「實現」的錯誤的方法是:

  • 單擊顯示家長或顯示父2
  • 單擊下一步提醒
  • 點擊躲來躲去(我甚至使用html('')刪除內容
  • 再次單擊顯示父項或顯示父項2
  • Cli ck Next
  • Bam!發生兩個警報!發生
  • 重複了越來越多的警報

我知道我在小提琴寫的代碼是沒有好處的,因爲這是我昨天發現只是問題的一個簡化版本。所以基本上我的意思做的是:

  • 顯示父和顯示父2實際上是一個按鈕來調用AJAX顯示專輯的內容(可超過2當然)
  • 的< P類= 「next」> Next </p>表示從AJAX請求返回的數據。
  • 每個這些數據都可以通過點擊來完成AJAX返回的數據。在這個小提琴中,我簡單地提醒'aaa'顯示父母/顯示父母2(應該是「專輯」)的標題。這就是爲什麼我包括jQuery的單擊事件裏面的表演,點擊事件,因爲我需要請求該節目點擊事件中由AJAX傳遞的數據(希望這是不夠清楚)

我已經嘗試了一些方法來解決這個問題,但它仍然讓我煩惱,我的代碼正在產生錯誤(?)。其中一些是:

  • 更改$('。parent')。html('');到$('。parent')。remove();但當然div類的父母將會消失,我將不得不重新創建它,這不是我想要的。也許我可以做$('。parent *')。remove();刪除父div內的所有元素,但這是我的最後一招。這是一個令人困惑的問題,因爲螢火蟲一次只顯示一個存在於p class =「next」>中的實例。
  • 在顯示點擊事件之外移動下一個點擊事件。 show click事件會將AJAX請求返回的數據存儲在某個div中,並且下一個click事件將從該div中獲取數據。解決方法,但有沒有更好的方法?

希望這個已經夠清楚了。謝謝!

回答

1
var title 
$('.show').live('click',function(){ 
    title = $(this).attr('title'); 
    $('<p class="next" />').text('next').appendTo($('.parent')); 
    $('<p class="hide" />').text('hide').appendTo($('.parent')); 
    $('.parent').fadeIn(500,function(){ 

}); 
});  

$('.hide').live('click',function(){ 
    $('.parent').empty(); 
}); 

$('.next').live('click',function(){ 
     alert('aaa '+title); 
     return false; 
    }); 
+0

除了@cory的回答,看上面的代碼,我已經將.next現場活動從你的.show現場活動 – griegs

+0

是啊,這就是我所做的。但我做了一個額外的標記來存儲AJAX返回的數據。我想這是這種情況的最佳選擇。 – Henson

2

錯誤可能在於您對live的理解。 Live不會運行一次,並將處理程序附加到找到的每個元素。相反,它允許您將處理程序附加到可能尚未存在的元素

所以每到這條線在你的提琴打時間:$('.next').live('click',function(){,你正在安裝其他處理程序中的每個對象與next曾經存在,即使該對象尚未建立。

+0

是的,想通了。但是它將一個處理程序附加到已經消失的元素上並不奇怪嗎?那麼我沒有刪除

但沒有$('。parent')。html('');照顧呢? – Henson

+0

不是。每次點擊.show它都會向.next添加另一個點擊事件。因此創建一個新的.next元素會在創建之前繼承所有的點擊事件。請記住,它不是將事件附加到特定元素,而是附加到元素的想法。當你創建這個元素時,它有附加的事件 – griegs