Sie brauchen keinen Wähler dafür. Sie haben immer einen Verweis darauf über document
.
document.addEventListener("keypress", handler);
Wenn Sie das HTML
Element möchten, können Sie den "html"
Selektor verwenden.
document.querySelector("html").addEventListener(...)
Oder einfach document.documentElement
verwenden.
document.documentElement.addEventListener(...)
Und wie @cepharum erwähnt, können Sie das gleiche mit jQuery tun, indem das Element oder Wähler auf die $
Funktion übergeben.
Einige Hinweise auf Ihre Frage aktualisiert, während document
immer zur Verfügung steht, ist document.body
wahrscheinlich nicht, bis der Körper vollständig geladen ist. Sie sollten stattdessen document
verwenden können.
Außerdem haben Sie eine return-Anweisung in Ihren Event-Handler. Das wird nichts nützliches tun. Der Rückgabewert wird ignoriert.
Schließlich ist es scheint nicht, wie Sie den Rückruf zu einem passenden Wähler begrenzen wollen, wenn sie abgefeuert werden sollen, wenn der Benutzer den Schlüssel irgendwo im Dokument drückt. Das scheint einfach so zu sein.
Wenn Sie eine delegatorbasierte Ereignisdelegierung planen, sind Sie fast da. Sie werden wahrscheinlich höchstwahrscheinlich die übergeordneten Knoten von event.target
durchlaufen, um zu sehen, welche mit dem Selektor übereinstimmen, und dann den Handler für sie ausführen.
export function listen(eventName, selector, handler) {
document.body.addEventListener(eventName, event => {
var el = event.target;
do {
if (el.matches(selector)) {
handler(event);
}
} while((el = el.parentNode));
});
}
Wenn Sie wollen, dass es nur für das erste Spiel schießen gefunden, fügt return
oder break
nach dem handler
Aufruf.
Oder verwenden Sie '$ (document) .on (" click ", Handler)' bei der Arbeit mit jQuery. – cepharum
Ich habe meine Frage bearbeitet, nicht wirklich, was ich tun möchte, aber danke trotzdem – dbrrt
@dbrrt: Nicht sicher, was du meinst. Scheint so, als ob du dieses Ereignis irgendwo im 'Dokument' festhalten willst. Warum brauchen Sie dafür einen Selektor? Versuchen Sie tatsächlich, eine jQuery-ähnliche Delegation zu machen? Wenn ja, gibt es auch dafür eine Antwort, aber Sie müssen Details darüber angeben, was Sie wirklich wollen. – spanky