2010-12-09 12 views
16

Ich habe eine Funktion, die derzeit auf .keypress -Ereignis funktioniert, wenn der Benutzer etwas in der Textbox es Code tun, aber ich möchte das gleiche Ereignis auch ausgelöst werden wenn der Benutzer die Textbox löscht .change nicht, da es nach dem Benutzer feuert hilft den Fokus auf etwas anderenJquery: wie ein Ereignis ausgelöst wird, wenn der Benutzer ein Textfeld löschen

Dank

+0

Keine Lösung hier, um die Situation zu beheben, wenn Sie verwenden type = "search" und die Standard-Clear-Taste. – luky

Antwort

40

ändert das keyup Ereignis erkennt, wenn der Benutzer als auch die Box gelöscht hat (dh Backspace löst das Ereignis, aber Backspace löst nicht das Ereignis keypress in IE)

$("#inputname").keyup(function() { 

    if (!this.value) { 
     alert('The box is empty'); 
    } 

}); 

jsFiddle

Als Josh sagt, dies wird für jeden Zeichencode gefeuert, die in der Eingabe gedrückt wird. Dies zeigt meistens nur, dass Sie das keyup-Ereignis verwenden müssen, um die Rücktaste auszulösen, und nicht das keypress Ereignis, das Sie gerade verwenden.

+0

Dies wird eine Warnung für jeden Nicht-Zeichen-Schlüsselcode auslösen. –

+0

Yup - du hast Recht. Es wurde mehr darauf hingewiesen, dass das Keyup-Ereignis verwendet werden sollte, da das OP sagt, dass sie den Code bereits in einem Tastendruckereignis haben (wobei die Rücktaste nicht ausgelöst wird). –

+0

Ah ja. Guter Punkt. –

-1

Überprüfen Sie in Ihrer .keypress- oder .keyup-Funktion, ob der Wert der Eingabe leer ist. Zum Beispiel:

$("#some-input").keyup(function(){ 
if($(this).val() == "") { 
    // input is cleared 
} 
}); 

<input type="text" id="some-input" /> 
13

Die Lösung von Jonathon Bolster deckt nicht alle Fälle ab. Ich passte es auch Modifikationen, durch Ausschneiden und Einfügen:

$("#inputname").on('change keyup copy paste cut', function() { 
    //!this.value ... 
}); 

siehe http://jsfiddle.net/gonfidentschal/XxLq2/

Leider ist es nicht möglich, die Fälle zu fangen, wo der Wert des Feldes wird mit Hilfe von Javascript gesetzt. Wenn Sie den Wert selbst festlegen, ist das kein Problem, weil Sie wissen, wann Sie es tun ... aber wenn Sie eine Bibliothek wie AngularJS verwenden, die die Ansicht aktualisiert, wenn sich der Status ändert, kann es etwas mehr Arbeit sein. Oder Sie müssen einen Timer verwenden, um den Wert zu überprüfen.

Siehe auch die Antwort auf Detecting input change in jQuery?, die das Ereignis "Eingabe" vorschlägt, das von modernen Browsern verstanden wird. Also einfach:

$("#inputname").on('input', function() { 
    //!this.value ... 
}); 
+0

Ich stimme zu und ich war auf der Suche nach dieser Antwort! Vielen Dank! –

0

andere Möglichkeit, dass diese in prägnanter Weise tut hören für „Eingang“ Ereignis auf Textfeld/Input-Typ: Textfelder

/** 
* Listens on textarea input. 
* Considers: undo, cut, paste, backspc, keyboard input, etc 
*/ 
$("#myContainer").on("input", "textarea", function() { 
    if (!this.value) { 

    } 
}); 
Verwandte Themen