2014-03-05 42 views
0

我有一個js函數,比如check(val)。我在身體和一個標籤上點擊事件來調用它。當我點擊body時,它正確顯示了body元素的id。但是,當我點擊時,它會顯示兩者和身體的ID!Javascript顯示body和點擊elemnt的點擊事件的IDS

我只是想顯示點擊和身體的點擊事件的一些其他行動要執行的id。

我的HTML代碼示例:

<body id="body" onclick="check(this.id);"> 
    <a href="#" id="ele" onclick="check(this.id)">Hello</div> 
</body> 

JS代碼:

function check(val) 
{ 
    if(val=="ele"){ 
    alert("element is clicked"); 
    }else if(val=="body"){ 
    alert("Body is clicked"); 
    } 
} 
+2

事件傳播 –

+0

見http://www.quirksmode.org/js/events_order.html。關於事件處理的其他文章也很好,你應該閱讀它們。 –

回答

0

你得到兩個IDS,因爲當你點擊你也可以點擊身體上的錨自錨是身體元素的孩子。

0

重要提示:當你點擊你也可以點擊在身體

使用這樣

<body id="body" onclick="check(this);"> 

    <a href="#" id="ele" onclick="check(this);">Hello</a> 
    </body> 

的Javascript

function check(val) 
    { 
     if(val.id.toString()=="ele"){ 
     alert("element is clicked"); 
     }else if(val.id.toString()=="body"){ 
     alert("Body is clicked"); 
     } 
    } 
+0

我想在'body'的情況下,這是真的,但是你可能有兩個不相互重疊的元素,點擊其中一個元素仍然會觸發每個元素的處理程序。 –

1

錨每一個瀏覽器處理事件冒泡不同。有些會顯示兩者,有些只會顯示鏈接。您可以更改功能,以適應每個點擊的元素:

function check(val) 
{ 
    alert("Clicked element type is: " + val.nodeName); 
} 

這種方式,因爲你檢查節點本身的類型,你不需要任何ID檢測。

4

您需要使用event.stopPropagation()方法stop Propagation of event。已經@StephenThomas在你的問題的評論中提到了這一點。

試試這個,

HTML標記:

<body id="body" onclick="check(event,this.id);"> 
    <a href="#" id="ele" onclick="check(event,this.id)">Hello</div> 
</body> 

javascript代碼:

function check(event, val) { 
    if (val == "ele") { 
     alert("element is clicked"); 
     event.stopPropagation(); //here we stop propagation of the event 
    } else if (val == "body") { 
     alert("Body is clicked"); 
    } 
} 

看到這個DEMO

我希望這會幫助你...