이벤트 위임이라고이 패턴은, 당신은 또한 요소가 일치하는/matchesSelector의 API를 살펴
을해야 David Walsh
의 블로그에 great article을 찾을 수 있습니다 이렇게 할 수는 있지만 특정 요소에 이벤트를 바인딩하는 것만 큼 효율적이지는 않습니다. 어떤 경우에 언급되지 않은 장소에서 누군가가 클릭하면 귀하의 기능이 실행된다는 의미입니다. 그렇더라도 올바른 케이스를 찾을 때까지 케이스를 순차적으로 검색해야합니다.
ID를 키 입력 한 개체를 사용하는 것이 더 좋은 방법입니다.
var handlers = {
"someid": function(event) { // some action
},
"someotherid": function(event) { // some other action
},
...
}
document.onclick = function(event) {
if (handlers[event.target.id]) {
handlers[event.target.id](event);
} else {
// default action
}
}
이것은 순차적 검색 문제를 해결하지만 누군가 언 바운드 요소를 클릭 할 때도 계속 실행됩니다. 클릭에 대해서는별로 문제가되지 않지만 거의 항상 발생하는 마우스 이동 이벤트에 대해 동일한 작업을한다고 상상해보십시오.
또한, 이것은 핸들러를 클래스에 바인딩하거나보다 복잡한 선택자로 쉽게 일반화하지 않습니다.
은 당신이하고있는 것은 당신이 쓸 때 jQuery를이 .on()
이벤트가 바인딩을 구현하는 방법과 유사합니다
셀렉터와 일치하는 요소가있을 때입니다 특별히 필요한 경우이 양식은 일반적에만 사용됩니다
$(document).on("click", "someSelector", handlerFunction);
, 동적으로 생성 - 요소 변경에 따라 핸들러를 추가 및 제거하지 않고 핸들러를 한 번 정의 할 수 있습니다. 그러나 정적 요소에 대해, 우리는 일반적으로 선택된 요소 중 하나를 클릭 할 때만 핸들러를 실행하는 간단한
$("selector").on("click", handlerFunction);
다음 브라우저가 필요하기 때문에주의해야합니다.
예,이를 이벤트 위임이라고합니다. 그러나 개별 요소에 다른 상위 요소를 사용합니다. 함수를 여러 가지 종류로 수행하는 것은 나쁜 습관입니다. 두 이벤트 리스너가 완전히 다른 동작을하면 두 개의 다른 함수로 분리하십시오. – Xufox
고마워, 그게 뭐라 불렀는지 몰랐어. 따라서 본질적으로 각 주요 부모 요소에 이벤트를 등록하고 응용 프로그램의 이벤트를 그런 방식으로 관리 할 수 있습니까? 그러나 한 부모가 별도의 클릭 이벤트, 마우스 오버 이벤트 등을 가져야한다고 말하고 있습니까? –
'document'가 아닌 가능한 가장 가까운 상위 항목으로 위임하십시오. – Oriol