2014-03-05 1 views
0

나는 하나의 js 함수, check (val)을 가지고 있습니다. 나는 body와 하나의 태그에 click 이벤트를 호출한다. body를 클릭하면 body 요소의 id가 올바르게 표시됩니다. 그러나, 클릭 할 때 양쪽과 몸의 ID를 보여줍니다!Javascript는 클릭 이벤트에서 body와 clicked elemnt의 ID를 표시합니다.

나는 클릭 할 때의 본문과 클릭 이벤트에 대한 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

이벤트 전파 http://www.quirksmode.org/js/events_order.html를 참조 –

+0

. 이벤트 처리에 관한 다른 기사도 잘 읽으셔야합니다. –

답변

0

당신은 또한 몸에 클릭하는 앵커를 클릭하면 앵커가를하기 때문에 때문에 두 ID를 얻고있다 본문 요소의 하위.

0

중요한 점 : 당신은 당신이 또한

사용이

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

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

자바 스크립트

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

stop Propagation of eventevent.stopPropagation() 방법을 사용해야합니다. 이미 @StephenThomas가 질문에 대한 언급에서이 점을 언급했습니다.

이 시도

,

HTML 마크 업 :

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

자바 스크립트 코드 :

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를 참조하십시오.

나는이 당신을 도울 것입니다 희망

...

관련 문제