Jako że odpowiedź @ rsp prawidłowo rozwiązuje problem odłączenia poprawnego programu obsługi, nie rozwiązuje ona w rzeczywistości problemu z wyświetlaniem nazw. Aby to obsługiwać będzie trzeba zrobić trochę więcej kodowanie tak:
function on(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.addEventListener(evt, handler, true);
return evt;
}, '');
}
function off(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.removeEventListener(evt, handler, true);
return evt;
}, '');
}
// Your handler
function onScroll(e) { ... }
// To bind it
on(window, 'scroll.myScrollNamespace', onScroll);
// To unbind it
off(window, 'scroll.myScrollNamespace', onScroll);
Więc Podsumowując: to faktycznie ustawia kilka detektorów zdarzeń - po jednym dla każdej części przestrzeni nazw. Ta funkcjonalność nie jest niestety natywnie obsługiwana, ale jak widać, można ją osiągnąć stosunkowo prosto. Tylko uważaj, że mimo tego skryptu obsługującego głęboki podział nazw (np. scroll.parent.child
) wiązałby on wiele detektorów zdarzeń (w tym przypadku 3), a zatem jest niewskazany.
Można to zrobić bardziej wydajnie, ale to się robi.