2014-12-22 40 views
-3

我改變了我的DIV ID從1個TOT 2.jQuery的改變DIV ID,運行舊DIV ID執行不改變

<div id="1"></div> 
$('#id1').attr('id', '2'); 

新:

<div id="2"></div> 

我使用這個jQuery :

$("#1").click(function() { 
$("#2").click(function() { 

然而,在id已經改變d我點擊它,它仍然執行#id1點擊的JQuery函數。

它應該是jquery更改div是now2,所以jquery函數#id 2單擊。

+1

這沒有任何意義:'$( '#ID1')'。 – melancia

+0

我想你正在尋找'$('#1')'而不是。 – melancia

+2

除了@MelanciaUK的觀察,你也應該委託你的選擇器。正文準備就緒時,ID = 2元素不存在。 – hjpotter92

回答

0

但是,在ID已經改變後,我點擊它,它仍然執行#id1點擊的JQuery函數。

這是因爲DOM中存在的元素仍然是相同的元素,其ID爲1,所有改變的都是它的標識屬性。如果要刪除元素上的事件處理程序,請使用off()

<div id="1"></div> 
$('#id1').click(function() { 
    alert('foo'); 
}).attr('id', '2'); 

$('#id2').off('click').click(function() { 
    alert('bar'); 
}); 

在本例中,點擊該div將導致bar被顯示在警報作爲呼叫至off()除去表示foo第一處理程序。

+0

這似乎是答案,謝謝。你可能對我有一個小例子嗎? – user3710844

+0

@ user3710844剛剛爲您添加了一個。 –

+0

基本上你說的是我還需要在DOM中進行更改? – user3710844

0

附加到匹配選擇器的元素的jQuery處理程序。更改ID,類等不會刪除處理程序(或將它們移動到其他元素)。

達到你想要的(總是根據當時的ID應用)的效果,使用.on()

$(document.body).on('click', '#id1', function() { 
    // do something whenever the current #id1 element is clicked 
}); 

$(document.body).on('click', '#id2', function() { 
    // do something whenever the current #id2 element is clicked 
}); 
+0

說實話,我不知道哪個解決方案更適合你或Rory。 – user3710844

+0

這取決於你如何選擇你的元素。如果你可以使用普通的類,那麼你只需要一個委託處理程序,所以使用這個方法。如果你*有*通過獨特的'id'選擇,那麼你可能會更好我的方法。 –