Keyup-Ereignis-listener wird ausgelöst, wenn die EINGABETASTE gedrückt wird auf Chrome Ominbox
Im chrome-browser, bei der Verwendung dieses snippets:
$(document).on('keyup', function(){
alert("Hey");
});
Jedes mal, wenn ich drücken Sie enter
in der url-Leiste (wenn ich zum Beispiel Ausschneiden und einfügen der url der Seite selbst) wird der Ereignis-listener ausgelöst wird.
Warum ist es passiert?
EDIT:
Wundert es mich, weil der url-bar ist nicht in document
(vielleicht in window
?) und firefox hat nicht dieses Verhalten. Wenn ich mir für e.target
, Chrome Inspector zeigt body
.
Ich dachte, das könnte werden verursacht durch event bubbling also versuchte ich Folgendes:
$(document).on('keyup', function(e){
e.stopPropagation();
alert("Hey");
});
Aber es funktioniert nicht.
Wie kann ich verhindern, dass er ausgelöst wird?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies geschieht, weil, sobald Sie die EINGABETASTE drücken in der omnibox, der Schwerpunkt wird auf der Seite. Wenn Sie versucht, die gleiche Sache mit
onkeydown
, die omnibox, würde sich nichts ändern, weil, wie Sie sagte, es ist nicht ein Teil des Dokuments. Eine Möglichkeit zum filtern der omnibox der falschen Veranstaltung wäre, zu überprüfen, dass jederkeyup
hat ein paar keydown.Demo.Machen Sie Ihre eigene HTML-Seite und versuchen Sie es vorzugsweise, weil PasteHTML.com stopft es in einen iframe. Das funktioniert dort, klicken Sie auf den text zuerst zu geben, die das iframe-konzentrieren.Demo.
Verwenden Sie Ihre Maus, um den Fokus auf die omnibox, und die Art, nicht eine Tastenkombination. (Das feuert die onkeydown-Ereignis, die Schaffung eines " false-positive)
Update: Als der Chrome 35, dies nicht mehr passieren. Ich weiß nicht, welche version Sie es behoben jedoch.
Die Lösung für Chrome ist einfach: verwenden Sie
keypress
stattkeyup
. Dies funktioniert nicht in allen Fällen (IE), so dass Sie haben können, um eine bedingte, um den Typ Umschalten, je nach browser. Allerdings wird dies lösen Ihr Problem.Beachten Sie, dass der Suche nach einem bestimmten keycode kann negieren das Problem. Viel Glück.
keypress
undkeyup
sind nicht die gleiche Sache.Weil
keyup
passiert, wenn eine beliebige Taste, erscheint auf Ihrer Tastatur, das ist es, was das Ereignis ausgelöst. Chrome nur dieses Ereignis auslöst, wenn ein Dokument, das nicht aktiv ist, wird offenbar, wenn mit einem snippet.onkeydown
, das Dokument erhält den Fokus, und da das Dokument den Fokus hat jetztonkeyup
, die Warnung erscheint.Könnten Sie filter für die Schlüsselcode ...falls das hilft...die 13 ist enter-Taste
Eine mögliche Lösung ist, etwas zu verzögern, das "keyup" - Ereignis-handler-Registrierung. Dies wird überspringen die erste "falsche" auslösen, das scheint zu passieren, in Chrome und Safari.