2010-12-09 50 views
1

我一直試圖切換div的ID當用戶點擊它。 首先點擊的作品,它改變的div ID,但再次按下時,它不會再次改變div的ID ....jQuery:更改div的ID兩次不起作用

$("#hello").click(function(){ 
    $(this).attr("id","bye").text("bye"); 
}); 

$("#bye").click(function(){ 
    $(this).attr("id","hello").text("hello"); 
}); 

<div id="hello">hello</div> 

如何得到這個工作任何想法?

回答

7

處理程序在文檔加載時分配給元素,所以沒有處理程序分配給bye,因爲沒有元素。

您可以使用.live()(注意.delegate()是更好,如果有一些祖先它可以應用到。):

例子:http://jsfiddle.net/patrick_dw/Pwa5Q/2/

$("#hello").live('click',function(){ 
    $(this).attr("id","bye").text("bye"); 
}); 

$("#bye").live('click',function(){ 
    $(this).attr("id","hello").text("hello"); 
}); 

或者只分配處理程序的元素與hello,並使用相同的處理程序切換ID。

例子:http://jsfiddle.net/patrick_dw/Pwa5Q/

$("#hello").click(function(){ 
    var newID = this.id === 'hello' ? 'bye' : 'hello'; 
    $(this).attr("id",newID).text(newID); 
}); 
+1

我更喜歡第二個解決方案。更簡單的代碼,更少的客戶端瀏覽器工作,並正確地鏈接這兩個操作。 – jball 2010-12-09 23:06:37

1

它不會因爲點擊事件處理工作的「再見」之前的div id爲DOM設置爲「再見」的約束。你可以使用live()來解決這個問題:

$("#hello").live('click', function(){ 
    $(this).attr("id","bye").text("bye"); 
}); 

$("#bye").live('click', function(){ 
    $(this).attr("id","hello").text("hello"); 
});