2013-11-14 49 views
3

event.target函數適用於div而不適用於表元素。e.target()不適用於表元素

的html代碼:

<div class="one body" > 
    sd 
    </div> 
<div class="two body"> 
    sddsd 
</div> 
    <table width="100%" border="0" cellspacing="0" cellpadding="0" class="three body">jjj</table> 

JS:

$(".body").click(function(e){ 


    alert("xxxxxxxxx"+e.target.className); 
}); 

DEMO:http://jsfiddle.net/kavinhuh/z4rkW/31/

+1

您的HTML表格無效。 「jjj」實際上並不在表格內呈現。你需要(一個''然後)一個'',最後一個'​​'。 –

+1

謝謝大家對我非常有幫助的意見,我愛堆棧溢出 – kavinhuh

回答

4

導致實際e.target是TD,而不是表
雖然你有一個不正確的表格HTML元素結構。預計表格有trtd元素。

alert("Class: "+ event.target.className); 

//是第一觸發事件(TD

alert("Class: "+ this.className); 

//是,被委派至該事件,在這種情況下,元件.body

+1

哪個瀏覽器把文本放在'td'裏面? Chrome把它放在「表格」之外。 – lonesomeday

+0

@ lonesomeday doh,對。認爲像瀏覽器自動添加在這裏做了同樣的工作。檢查,這是正確的。 FF的行爲方式相同。任何我要測試的方式,你只是更快;) –

3

這是因爲元你的HTML是非法的。如果你有非法的HTML,你不應該期望你的代碼正常工作。

文字可能不是table的直接子元素。您需要trtdth。瀏覽器重新解析您的HTML並使合法的東西。在這種情況下,它將文本放在表格之外:

jjj 
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="three body"></table> 

這取自Chrome的DOM檢查器。解決方法是將文本合法地放入table

1

table元素不能有任何文字內容,所以,你的HTML實際上將呈現爲

<div class="one body"> 
    sd 
    </div> 
<div class="two body"> 
    sddsd 
</div> 
    jjj<table class="three body" border="0" cellpadding="0" cellspacing="0" width="100%"></table> 

這就是爲什麼你的事件處理函數不是當你在jjj

2

使用this點擊,而不是e.target射擊。

e.target將爲您提供點擊元素,而不是事件已附加到的元素。當事件已附加到的元素具有子元素時,您單擊子元素e.target將返回子元素。

alert(this.className); 
+0

我不認爲OP想要得到'body'元素的類... – lonesomeday