2012-07-22 3 views
0

클릭 한 링크를 비활성화하려고합니다. 나는 onmousedown 이벤트 리스너를 첨부했습니다.e.preventDefault() 및 e.cancelBubble이 연결된 리스너와 작동하지 않습니다.

if (!e) var e = window.event; 
e.cancelBubble = true; 
if (e.stopPropagation) e.stopPropagation(); 

그러나 여전히 링크로 클릭하고로드 할 것입니다 : 나의하면 onMouseDown 기능에서

if(document.addEventListener){ 
    document.addEventListener("onmouseover", onMouseOverIdent, false); 
    document.addEventListener("onmousedown", onMouseDownIdent, false); 
    document.addEventListener("onmouseout", onMouseOutIdent, false); 
}else{ 
    if(document.attachEvent){ 
     document.attachEvent("onmousedown",onMouseDownIdent); 
     document.attachEvent("onmouseover",onMouseOverIdent); 
     document.attachEvent("onmouseout", onMouseOutIdent); 
    } 
} 

나는 쿼크 모드에서이 기능을 사용했습니다. 나는 무엇이 그것을 일으키는 원인이 될 수 있고 어떤 도움든지 평가 될 것입니다 생각하지 않았다.

업데이트 : 내가 언급 한 것을 잊어 버린 또 다른 한 가지는 페이지의 모든 앵커 태그 요소에서이 작업을 수행하고 있다는 것입니다. 이것은 나중에 그 청취자를 제거하는 것이 더 문제가되는 것으로 보인다.

답변

5

href가 따르지 않도록하려면 stopPropagation 대신 preventDefault을 사용해야합니다.

이 핸들러가있는 수, 링크를 직접 있다고 가정 ...

if (!e) var e = window.event; 
e.returnValue = false; 
if (e.preventDefault) e.preventDefault(); 

를 IE를 들어,

e.returnValue = false; 

사용하는 거라고 그래서 다음과 같이한다 관련 코드를 제외 했으므로 지금은 알 수 없습니다.


한 가지 더만, onmousedown 이벤트로만 작업하고 있습니다. 이 동작을 방지하거나 실제 click 이벤트의 버블 링을 사용하지 않으려면, 당신은 addEventListener 이벤트 이름의 일부로 "on"이없는해야 ... 또한, 통지를

document.addEventListener("click", ... 
document.attachEvent("onclick", ... 

을 수행해야합니다.

+0

이렇게 재미 있습니다. 나는 onmousedown 이벤트에서이 작업을 시도했지만 작동하지 않았지만 앵커 태그에 별도로 새로운 리스너를 만드는 것이 효과가있는 것 같습니다. 왜 링크에 구체적으로 있어야합니까? e.returnValue는 전파가 발생하지 않는 동안 버블 링이 발생하지 않도록합니까? – crtjer

+0

@crtjer : 질문에 관련 코드를 포함하지 않았으므로 몇 가지 가정을해야합니다. 나는 핸들러가 ''요소에 있다고 가정했다. 다른 문제도 있으므로 답변을 업데이트했습니다. –

관련 문제