2013-03-15 207 views
1

我想添加一個點擊事件到一串div元素,我通過追加它們創建,我有一些麻煩。在JavaScript中添加onclick事件到附加div標籤

我有一堆的div元素與ids a0 ---> an。我正在嘗試在創建div之後創建一個for循環來爲它們分配單擊事件。問題在於我點擊事件發生時的做法,我沒有辦法跟蹤哪個div觸發了該事件。下面的代碼可能會更清楚。所以我遇到的問題是#a +我總是返回最後一個div,我希望它返回被點擊的div編號。

$(document).ready(function() { 
      traverse(oo); 
      for (i = 0; i <= groupNum; i += 1) { 
       $("#a" + i).click(function() { 
        console.log("#a" + i + "clicked"); 
       }); 
      } 
     }); 

我想過關閉closeur,但似乎我會讓它變得更加複雜。有沒有人有關於如何做到最好的建議?

在此先感謝。

+0

如果id被指定爲'0 ... N',並使用'.index()'獲取相應的元素,則可以使用'class'。 – SachinGutte 2013-03-15 17:38:51

+0

這是一個[javascript關閉](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures)問題。 – pktangyue 2013-03-15 17:42:36

+0

對不起,你是什麼意思這是一個Javascript關閉問題? – recneps 2013-03-15 17:49:42

回答

6

我不知道你正在嘗試做的,但如果你只是想點擊事件指派給一堆元素,然後用正確的選擇(請注意使用的$(this)獲得點擊的元素):

$("div").click(function(){ 
    var clickedDiv = $(this); 
    var id = clickedDiv.attr("id"); 
}); 

如果你不希望所有div元素,那麼你可以添加一個類,對他們使用不同的選擇:

$(".MyDivClass").click(function(){... 

或不日E類,一「開頭」上id(與獲得其中id屬性以「A」開頭的所有div元以下):

$("div[id^='a']").click(function(){... 

如果要動態地添加其他的JavaScript的div和你希望他們自動獲得點擊的事件,用on功能...

$(document).on("click", ".MyDivClass", function(){... 
+0

謝謝,這正是我需要的。 – recneps 2013-03-15 17:49:01

2

正如您所注意到的,變量i將包含上次迭代中設置的值。更改

console.log("#a" + i + "clicked"); 

通過

console.log(this.id + " clicked"); 

在事件處理程序,this是該事件的目標DOM元素。

0

你可以這樣做:

$('[id^="a"]').click(function() { 
    console.log(this.id+" clicked"); 
}); 
0

您可以將單擊事件分配給類而不是特定的ID,並在點擊函數中使用條件語句根據ID完成不同的操作。

$(documnet).ready(function(){ 
     $('.clickclass').click(function(){ 
        /* conditional code here */ 
     }); 
    });