Od wewnątrz funkcji jaktest, czy obiekt jest wydarzeniem DOM
function eventHandler(e) {
// ...
}
jest jakiś niezawodny i skuteczny sposób, aby określić, czy e
to wydarzenie DOM?
Od wewnątrz funkcji jaktest, czy obiekt jest wydarzeniem DOM
function eventHandler(e) {
// ...
}
jest jakiś niezawodny i skuteczny sposób, aby określić, czy e
to wydarzenie DOM?
Nie sądzę, że istnieje wiarygodny sposób określenia, czy dany obiekt jest NOT wydarzenie DOM.
typeof e
zawsze zwróci 'object'
dla prawdziwych obiektów Event, co nie jest pomocne.contructor
może wydawać się obiecująco, ale można to zrobić:function DummyEvent(){
this.constructor.toString = function(){
return "function MouseEvent() { [native code] }";
}
}
Ten kończy się dokonywania console.log(e.constructor)
Wydrukuj "function MouseEvent() { [native code] }"
Tak, jest tam "niezawodny" sposób stwierdzić, czy obiekt to wydarzenie? nr.
Edytuj — Pamiętaj, że wszystko to jest nieistotne, jeśli chcesz zapobiec fałszowaniu wydarzeń, ponieważ możesz łatwo tworzyć prawdziwe wydarzenia.
var evt = new Event('click');
var evt2 = document.createEvent('MouseEvents');
evt2.initMouseEvent('click', ...);
//etc
Edit2 — Utworzyłem test jsFiddle próbując znaleźć jakiś sposób, aby odróżnić obiekty, ale nie znalazłem jeszcze nic pewnego. Zauważ, że nie zadałem sobie trudu, aby określić właściwości na DummyEvent
, ponieważ te mogą oczywiście łatwo zostać sfałszowane.
Dzięki za dokładną odpowiedź. Zaznaczam to jako zaakceptowane. –
Być może, jeśli bańki zdarzeń event.bubbles
się wydarzenie DOM DOM. Ale nawet jeśli to stwierdzenie jest prawdziwe, jego propagacja może zostać zatrzymana.
AKTUALIZACJA:
OK własnością szukasz jest e.target
i dla IE e.srcElement
. Obie właściwości zwracają element HTML, w którym miało miejsce zdarzenie, co definiuje je jako zdarzenie DOM z .
Może jednak powinieneś określić, co interpretujesz jako zdarzenie DOM. Czy chodziło Ci o rodzimych imprez przeglądarce, ponieważ jest to zdarzenie DOM też:
var zoo = jQuery('#zoo');
zoo.bind('moo');
zoo.trigger('moo');
Jest zbindowanych do węzła DOM
w jQuery I stworzył funkcję testującą, coś takiego:
function isEvent(e) {
try {
e.PreventDefault();
return true;
}
catch (err) {
return false;
}
}
i testowanie Kod:
var o = new Object();
var e = $.Event('click');
alert(isEvent(o));
alert(isEvent(e));
Poprzedni alert pokazuje wartość false, a drugi pokazuje wartość true. Zobacz fiddle.
AKTUALIZACJA: Bezpieczniej jest wywołać coś takiego jak preventDefault zamiast wyzwalacza.
Jak wywoływane jest 'eventHandler'? –
@TravisJ, który nie jest naprawdę istotny, prawda? Pytanie brzmi, jak możemy sprawdzić, czy "e" jest zdarzeniem DOM. – Shmiddty
@Shmiddty - Rozumiem, myślę, że źle zrozumiałem to pytanie. –