2011-08-26 44 views
1

我有一個按鈕,這樣的jQuery/JavaScript的替換功能只能使用一次

<button id="toggle_photo"> 
<span id="photo_text">Hide Photos (1)</span> 
<img class="icon" alt="Photos" src="/img/photos-16.png"> 
</button> 

和jQuery/JavaScript廣告在點擊

$('#toggle_photo').click(function(){ 
    var text = $('#photo_text').text(); 
    $('#photo_text').text(
     text.match(/Hide Photos/) ? text.replace("Hide", "Show") : text.replace("Show", "Hide")); 
    $('.photo_frame').toggle('slow'); 
    }); 

這工作第一次點擊按鈕來更改文本並且按鈕文本從Hide Photo (1)更改爲Show Photo (1)。接下來,該按鈕HTML通過AJAX調用替換爲新的文本,新的內容是相同的,除了可能的算的,所以它可能顯示這個代替

<button id="toggle_photo"> 
<span id="photo_text">Hide Photos (3)</span> 
<img class="icon" alt="Photos" src="/img/photos-16.png"> 
</button> 

不過,這一次的元素沒有觸發點擊事件,爲什麼?

回答

1

你已經給出了答案自己:

接下來,按鈕的HTML是取代通過AJAX調用新的文本......

要刪除的當前元素並加入一個新的。這些元素可能屬於同一類型,並且具有相同的ID,但它們仍然是不同的元素。

您必須在更改HTML後再次綁定事件處理程序,或者使用.live()[docs].delegate()[docs]來綁定事件處理程序。

編輯:我實際上不確定是否替換整個按鈕或只是其內容。但我認爲這是問題。如果這沒有幫助,你必須更具體,併發布替代HTML的功能。

+0

感謝您的提示,我沒有意識到「活」或「委託」方法,很好知道。實際上,整個按鈕的內容被替換了,不僅僅是' Bob

+0

只有內容或者按鈕本身嗎? –

+0

按鈕本身也是。我試圖讓'delegate'語法工作正確地說,點擊事件現在不會觸發,這就是我所擁有的'$('#toggle_photo')。委託('按鈕','點擊',功能(){...' – Bob