2016-08-22 2 views
0

In meiner Anwendung, ich höre den keyups auf einem Texteingabe wie folgt aus:Mehrere zwingende ‚keyup‘ Ereignisse

$('input[type="text"]').keyup(function(){ 

Dies funktioniert gut, aber auch hören möchte ich für den Benutzer die UP drücken oder AB-Taste überall im Rest des Dokuments - so habe ich versucht, die folgende (in der Hoffnung jquery würde die Eingabe eines in dem Textfeld und das global man für etwas anderes verwenden):

$(document).keyup(function(e) { 

Es hat dies nicht getan, und wählt jetzt den globalen Schlüssel für alles. Gibt es irgendeine Möglichkeit, Jquery dazu zu bringen, das zu tun, was ich hier brauche? Ich denke, es sollte die "spezifischste" Taste in jedem Fall wählen, aber es scheint nicht ...

+0

Wie Bestimmen Sie, welches es verwendet ? Denn es sollte beide auslösen, es sei denn, Sie verwenden 'stopPropagation()' oder 'preventDefault()' irgendwo. –

+0

Die Standardereignisausbreitung geht von den meisten verschachtelten Elementen im DOM zum Root, daher sollten diese Ereignisse funktionieren oder Sie haben die Ereignisausbreitung im Callback beendet. –

+0

Ihr scheint recht zu haben, testet auf JSFiddle, ruft beide an, muss etwas sein, das ich irgendwo falsch mache, ich stoppe nicht die propogation obwohl –

Antwort

1

können Sie auf diese Weise verwenden, um dem Benutzer zu hören, wenn Sie die Taste UP drücken überall von gesamten Dokumentelemente mit Ausnahme für die Eingabe [ ‚text‘ type =]

<script> 
     $(document).keyup(function(e) { 
      if($(e.target).is('[type="text"]')){ 
       return; <!-- you can handle keyup of input type text in this block --> 
      } 
      else { 
       <!-- handle your keyup of ducument code here --> 
      } 
     }); 
</script> 
+0

Genie! Vielen Dank. Ich weiß immer noch nicht, warum meine lokale js beide Funktionen nicht aufruft, aber das macht das überflüssig. Danke vielmals! –

+0

Sie sind willkommen :) und immer daran denken, es ist nicht notwendig, komplexen Code zu machen –

1

Es sollte beide Handler laufen, beginnend mit dem für das spezifischere Element. Wenn dies nicht der Fall ist, können Sie den zweiten Handler so ändern, dass er sich nicht überlappt.

$(document).on("keyup", ":not(:text)", function(e) { 
    ... 
}); 

:text ist ein Kurzwahlschalter für input[type=text] und :not() schließt sie in dieser Bindung.

+0

Du hast recht, ich habe es auf einem JSFiddle versucht und es lief beide mit dem am spezifischsten, was sinnvoll ist. Ich bin mir nicht sicher, warum es das nicht lokal bei mir macht. Darüber hinaus schien das ': not (: text)' nicht auf dem JSFiddle zu funktionieren. –

+0

Kannst du einen Link zu deiner Geige bereitstellen? – Barmar

Verwandte Themen