Frage an jquery-selectors, jquery, javascript – So wählen Sie mit jQuery leere Eingänge (Wert = “”) aus

47

Wie kann ich nach leeren Werten von (suchen?required), geben Sie Felder in einem Abschnitt ein und fügen Sie ihnen dann bei einem Ereignis eine Klasse hinzu, indem Sie jQuery? Bisher habe ich versucht:

jQuery("#sender_container input.required").val("").addClass("error");

Aber das scheint zu seinEINSTELLEN der Wert, anstatt es zu überprüfen. Irgendwelche Ideen?

Deine Antwort

8   die antwort
87
jQuery("#sender_container input.required").filter(function() {
    return !this.value;
}).addClass("error");​

filter und nicht[value=""] Sie können in sehendiese DEMO

Der Grund ist: Attributselektoren prüfen den Anfangszustand des Elements, nicht den aktuellen Zustand. (Beachten Sie, dass Sie den "Ausgangszustand" mit der Taste ändern könnenattr Funktion, aber es ist eine schlechte Übung, die Sie immer verwenden solltenprop)

Wenn Sie also den Eingabewert ändern, wirkt sich der aktuelle Wert nicht auf die Attributauswahl aus. nicht weise...:)

Anmerkungen:

.val() kehrt zurück den Wert des Formularelements und unterbricht die jQuery-Kette,$('selector').val().addClass('foo') Error, der Rückgabewert ist ein String \ Nummersetzt

.val(valueToSet)  Der Wert des Formularelements und unterbricht die jQuery-Kette nicht.Gültig
$('selector').val("some value").addClass('foo') - ist der zurückgegebene Wert eine jQueryDanke, aber das funktioniert nur, wenn ALLE Eingaben leer sind. Aber wenn ich 2 Pflichtfelder habe und eines einen Wert hat und das andere leer ist, passiert nichts.

DEMO gdoron
@ personne3000, wenn es nicht als offiziell unterstützt dokumentiert ist, würde ich es nie verwenden, da es ein bisschen hacky aussieht. Aber wenn doch, ist das ein großartiger Weg! Vielen Dank, dass Sie mir das Gegenteil beweisen. gdoron
Nein, aber nachdem ich einige Änderungen an anderem Code in meinen Skripten vorgenommen habe, hat es funktioniert. Es war also etwas anderes und nicht Ihr Code, das das Problem war. Ich wünschte, ich wüsste genau, was es war. gdoron
0

dass dies nicht funktioniert, wenn die

var elements = $('#sender_container input.required[value=""]')

 Attribut ist nicht vorhanden. Es funktioniert auch nicht für den aktuellen Eingabewert, wenn er vom Benutzer oder Skript geändert wurde.valueWenn Sie den aktuellen Eingabewert erhalten möchten, können Sie verwenden

jquery's Funktion:filterNachdem Sie das ausgewählt haben

var elements = $('#sender_container input.required').filter(function() {
  return this.value === '';

  // alternatively for "no value":
  // return !this.value;
})

jquery Elemente, die Sie Ihrer Klasse hinzufügen können:Um alle Felder überprüfen zu lassen, kann dies hilfreich sein.

elements.addClass('error');
0

Für diejenigen

$('#sender_container [required]').each(function(index)
{
       if (!($(this).val())) $(this).addClass('error');
}

});
0

Eingabe erforderlich funktioniert nicht wie folgt schreiben:So wählen Sie mit jQuery leere Eingänge (Wert = “”) aus

jQuery('#sender_container input[required]').val("").addClass("error");
10
$('input:text[value=]','#sender_container').addClass('error');

Dies wird in jQuery 1.9+ nicht funktionieren, siehe

jquery.com/upgrade-guide/1.9/#attr-versus-prop-Dies funktioniert nur für Wertattribute. personne3000
0
$field = $("#sender_container input.required");
if( ! $field.val())
{
    $field.addClass("error");
}

Dann benutze Nils
nur ein Feld$ ("# sender_container input.required"). each (function (if (! $ (this) .val ()) {$ (this) .addClass ("error");})) probiere dies aus.. gdoron
....filter:)Wenn Sie nur basierend auf dem anfänglichen Attributwert der Eingabe auswählen müssen, gilt Folgendes: gdoron
3
$('#sender_container input.required[value=""]').addClass('error')
ja es sollte funktionieren Richard Harris
Tatsächlich funktioniert es überhaupt nicht, es gibt ein falsches Leerzeichen zwischen der Eingabe und dem Attributselektor ... :) Es wird nach Eingabekindern mit einem leeren Wertattribut gesucht, Eingabe kann keine Kinder haben ... gdoron
+ 1-oops forgtttht Raum, der mein ans redigiert gdoron
Danke, Parv. Ihr Code sollte jetzt für alle untergeordneten Elemente eines enthaltenden Elements mit der ID sender_container funktionieren, bei dem es sich um ein Eingabefeld handelt, für das eine Klasse erforderlich ist und dessen Wert leer ist. Parv Sharma
Sie können dies versuchen: Parv Sharma
1
jQuery('#sender_container input.required[value=""]').addClass("error");

DEMO

$('input:not([value!=""])').addClass('error');

Hinweis: Diese Antwort sollte nicht verwendet werden, und der einzige Grund, warum sie nicht gelöscht wurde, besteht darin, dass sie von gelernt werden kann.

Entweder die inneren oder äußeren Anführungszeichen müssen einfach sein oder den inneren Anführungszeichen entkommen.

@FelixKling Bitte überprüfen Sie meine Demo thecodeparadox
jsperf beweis. Und die Tatsache, dass es seltsam ist, dass es sogar funktioniert, ist agroßer Nachteil. Ich würde es nicht benutzen, ich hoffe du auch nicht. Viel Glück, [email protected] gdoron: Ich denke es ist das gdoron
 Überprüfen Sie den aktuellen Status, $ thecodeparadox, und beachten Sie, dass es sich um einen schlechten Selektor handelt.:not[value...]Ich glaube, er sagt, es wird class = "error" dem Wertefeld zugewiesen, nicht dem Eingabeelement. gdoron
warum abstimmen? Bitte kommentieren thecodeparadox

Verwandte Fragen