當需要的點擊選擇器已被使用時,不需要.each()
$('div')
,參考DOM中的任何'div'
元素。
click事件會默認傳播了DOM樹,
返回每事件泡泡當前元素ID。
警報暫停氣泡執行,提醒當前元素ID使得清晰可見時肯定結果this.id
被滿足的冒泡階段。
如果沒有使用alert
或console.log
(在頁面上寫結果的示例中),所有先前檢測到的ID將被最新註冊覆蓋在航班上,導致只有最後註冊的ID。
比方說,我們有這個簡單的HTML結構的廣告,我們點擊款元素:
<div id="container">
Container element
<div id="box">
Box element
<p>Paragraph</p>
</div>
</div>
現在讓我們防止萬一使用event.stopPropagation()
$(function() {
$('div').click(function(ev) {
ev.stopPropagation();
console.log( this.id ); // "box"
});
});
傳播在上面的例子中, (即使我們點擊了p
元素)綁定到click事件的元素選擇器是$('div')
;進一步傳播被阻止 - 返回期望的結果:"box"
。
使用類似的方式上面的代碼,但聽而不是爲event.target我們可能最終有錯誤的結果:
$(function(){
$('div').click(function(ev){
console.log( ev.target.id ); // ""
// ""
});
});
導致實際註冊event.target
元素是HTML 段落元素。 具有兩個嵌套div
元件(#box
和#container
)的console.log
結果結束具有冒泡事件槽我們兩個div選擇器記錄所述相同(空)值event.target
兩次(// "" // ""
)。
要清楚地看到當前event.currentTarget元素冒泡是目前 - 我們可以這樣做:
console.log(ev.currentTarget.id+' '+ev.currentTarget.tagName); // "box DIV"
// "container DIV"
仍然導致最後 DIV元素。
探索所有上述結果後,得到的答覆是停止/取消事件冒泡使用event.stopPropagation()
和獲取event.currentTarget.id
DOM樹或者乾脆this.id
引起我們的jQuery選擇已經具有所需的$('div')
元素。
現在知道事件冒泡DOM和
獲得的列表中的所有元素ID
我們只允許事件傳播,並收集ID爲Array就像這個例子:
$(function(){
var allIDs = []; // Empty Array
$('div').on('mousedown', function(ev){ //
allIDs.push(this.id); // Push all bubbling DIVs ID into array!!
console.log("All IDs: " + allIDs);
console.log("Ev. bubbled Selector ID: " + this.id); // First Parent
console.log("Target ID: " + ev.target.id); // The targeted one
}).on('mouseup', function(){
allIDs = []; // Reset array for further clicks inspections
});
});
jsBin demo
快一如既往!感謝您的關注!我感謝你的答案! - 我知道我可以將一個點擊事件分配給一個div類,這不是我關心的問題,我需要爲容器返回一個ID(這就是爲什麼我向較小的DIV添加了邊距) – 2011-04-15 20:58:44
@roXon:在這種情況下@Matt Bridges回答符合您的要求。 – Chandu 2011-04-15 21:00:12
我剛剛嘗試了他的答案!對!謝謝Cyber,希望能早日見到你:) – 2011-04-15 21:04:45