:
$("*").on("click", "body:not(._tlh_dropdown, ._tlh_dropdown_content)", function() {
당신이 원하는 거의 확실하지 않다. 그러면 페이지의 모든 요소에 대한 이벤트 처리기가 추가되어 <body>
의 이벤트가 있는지 확인하도록 요청합니다. 그것은 일종의 의미가 없습니다. <body>
하지만 헤더에 다른 아무것도 없기 때문에
그리고
$("body").on("click", "*:not(._tlh_dropdown, ._tlh_dropdown_content)", function() {
는 테스트 페이지에 문제가
해야합니다. 위의 두 번째 사항 (원래 질문과 동일)으로 변경 한 다음 내용이 표시된 후 <div>
에 텍스트를 추가 한 다음 클릭하십시오. 또는,로 변경 :
$(document).on("click", "*:not(._tlh_dropdown, ._tlh_dropdown_content)", function() {
하고는 <body>
에서 버블 링 이벤트를 잡을 수 있습니다.
편집 — 당신이 $(document)
으로 가면, 그것은 또한 (당신이에, 각각의 핸들러 함수에 "이벤트"매개 변수를 추가하고 :-)를 작업 할 특히 좋은 생각을 것 헤더 몸까지 거품에가 "클릭"하면 실행 두 번째 핸들러를 방지 할 그 첫 번째 이벤트 핸들러 (추가 컨텐츠를 여는 일)에서
event.stopPropagation();
를 호출합니다. 두 번째 처리기의 경우 전파 전파가 중요하지 않지만 추가 된 내용을 닫으려고하는 중복 시도는 피할 수 있습니다.
일부 수정 — 아래의 설명을 참조하십시오. "close"핸들러는 "on"셀렉터 방식으로 문제를 해결할 수있는 몇 가지 미묘한 점이 있습니다.
그것은 당신의 jsfiddle에있는 것이 아닙니다! – Pointy
@Pointy 그래, 나는 새로운 아이디어로 주위를 놀고 있었다. 질문을 제출하기 전에 업데이트하는 것을 잊어 버렸습니다. 지금 편집 중입니다. 감사! – 1252748
몸체는'._tlh_dropdown, ._tlh_dropdown_content'가 될 수 없으면 그 클래스를 가질 수 없으므로 이벤트는 항상 트리거됩니다. 대신 event.target이 click 이벤트 내에 있는지 테스트하십시오. –