아래의 시나리오가 실패하는 이유를 다른 사람이 이해할 수 있기를 바랍니다. 나는 그 안에 중첩 된 다른 ul 태그의 주어진 하위 li 요소를 조건으로하는 이벤트 핸들러가있는 부모 ul 태그를가집니다. 마크 업입니다상위 요소의 이벤트 핸들러가 하위 요소 이벤트 중 하나에 대한 전파를 중지 할 수 있습니까?
<ul id="outerUL">
<li>LIST ITEM 1</li>
<li>LIST ITEM 2</li>
<li>
<ul id="innerUL">
<li>LIST ITEM 3</li>
<li>LIST ITEM 4</li>
<li>
<ul id="inMostUL">
<li>LIST ITEM 5</li>
<li>LIST ITEM 6</li><!-- we condition for this element -->
<li>LIST ITEM 7</li>
</ul>
</li>
</ul>
</li>
</ul>
자바 스크립트입니다 : 내가 신중에 넣어하기로 결정한 경우 지금
var outerMostUL = document.getElementById("outerUL");
outerMostUL.addEventListener('click',
function(e){
if(e.target.innerHTML === "LIST ITEM 6"){
e.stopPropagation();
alert("you clicked LIST ITEM 6. Event travel stops.");
// return; // a return WILL work
}
// below runs if propagation continues...
alert("outerMostUL event handler fired!");
},
false);
을 (그것은 ... 상위 호출에서 조건부 .stopPropagation()가 실패 할 것 같다). 그 리 태그에 또는 addEventListener() 호출, .stopPropagation()가 작동 예상대로, 예를 들면 :
// A discreet event handler does work
var inMostUL = document.getElementById("inMostUL");
inMostUL.children[1].addEventListener('click', function(e){
e.stopPropagation();
alert("The descendent event fires, but stops now.");
});
그래서 내 질문은 : 당신이 주어진 e.target에 대한 조상의 핸들러에서 조건을 사용할 수 있어야하고 그 전날의 번식을 멈추다 버블 링이 활성화되어 있다면? 엘리먼트는 이벤트를 발생시키기 위해 바인딩 된 자체 처리기를 가지고 있어야하지만 아마도 그 메소드를 통해 실제로 이벤트 리스너를 추가하는 조상 체인을 이동하는 전파 이벤트를 혼동하는 것 같습니다. 모든 가벼운 흘리기는 크게 감사하겠습니다. 나는 단순한 예제를 통해 js 이벤트 핸들링을 개념화하려고하고있다. 이 점을 고려해 주셔서 감사합니다.
jQuery를 사용하지 않는 한 이전 IE 지원을 위해'e.cancelBubble = true;'를 추가하십시오.이 경우 jQuery가 자동으로 처리합니다. – crush