2009-02-04 4 views
16

Ich habe ein Eingabeelement, und ich möchte sowohl das Change- als auch das Keypress-Ereignis mit der Eingabe binden, aber der Ereignisbehandlungscode ist für beide Ereignisse gleich. gibt es einen kurzen Weg, dies zu tun, anstatt den gleichen Code zweimal zu schreiben. Nun, ich könnte eine Methode schreiben, aber wollte sehen, ob es eine einfachere Art und Weise ist, dies zu tunAnfügen desselben Ereignisbehandlungscodes an mehrere Ereignisse in jquery

$("#inpt").change(function(){ 
    some code 
}); 

$("#inpt").keypress(function(){ 
    same code 
}); 

jede mögliche Weise ist es mir beiden Ereignisse binden kann?

Antwort

39

Sie die jQuery-on-Methode verwenden können.

$("#inpt").on("change keypress", function() { 
    code 
}); 
+1

danke, das ist, was ich gesucht habe. –

+0

Laut der jquery [docs] (http://api.jquery.com/bind/), "ab jQuery 1.7 ist die .on() -Methode die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument." Also für neuere Versionen als 1.7 würde ich '$ (" # inpt ") verwenden. (" Change keypress ", function() { code });' – jbustamovej

+0

@jbustamovej Ich habe es aktualisiert. – tvanfosson

6

können Sie die Funktion speichern und an beide binden:

var fn = function(){ /*some code*/ }; 
$("#inpt").change(fn).keypress(fn); 
1

Sie können auch anstelle der ‚binden‘ die ‚Live‘ Veranstaltung verwenden Sie eine sugested. Das Live-Event wird auch dynamisch erzeugte Elemente abdecken. (auslaufend auf 1,7)

Kaless1n und Matthew, um mehrere Elemente zu binden, verwendet das „Attribut beginnt mit Selector“:

var fn = function() { /*some code*/ }; 

$('input[id^="foo_"]').click(fn).keyup(fn).keydown(fn); 

, die für alle ‚Eingang‘ Elemente binden, wo die ‚id‘ beginnt mit 'foo_'. Sie können zum Beispiel 'input' in ein beliebiges anderes Element und/oder 'id' mit dem Attribut 'name' ändern.