Wie identifiziere ich leere Textfelder mit jQuery? Ich würde es gerne mit Selektoren machen, wenn es überhaupt möglich ist. Außerdem muss ich die ID auswählen, da ich im realen Code, in dem ich diese verwenden möchte, nicht alle Texteingaben auswählen möchte.
In meinen folgenden zwei Codebeispielen zeigt das erste den vom Benutzer in das Textfeld "txt2" eingegebenen Wert genau an. Das zweite Beispiel zeigt, dass ein leeres Textfeld vorhanden ist. Wenn Sie es jedoch ausfüllen, wird es weiterhin als leer angesehen. Warum ist das?
Kann dies nur mit Selektoren erfolgen?
Dieser Code gibt den Wert im Textfeld "txt2" an:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
alert($('[id=txt2]').val());
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
Dieser Code meldet das Textfeld "txt2" immer als leer:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
if($('[id^=txt][value=""]').length > 0) {
if (!confirm("Are you sure you want to submit empty fields?")) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
}
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
jquery
css-selectors
Cros
quelle
quelle
Antworten:
Ein anderer Weg
oder
oder
Arbeitsdemo
Code aus der Demo
jQuery
quelle
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
Selektor nicht funktioniert , wenn das Element vorhanden ist, aber kein Wertattribut hat, da es kein Wertattribut findet. Die Filtertechnik funktioniert jedoch in diesem Szenario.Sie können dies auch tun, indem Sie Ihren eigenen Selektor definieren:
Und dann wie folgt darauf zugreifen:
quelle
?
Übrigens, Ihr Anruf von:
kann stark vereinfacht und beschleunigt werden mit:
quelle
Wie im hochrangigen Beitrag erwähnt, funktioniert das Folgende mit der Sizzle-Engine.
In den Kommentaren wurde angemerkt, dass das Entfernen des
:text
Teils des Selektors dazu führt, dass der Selektor ausfällt. Ich glaube, was passiert, ist, dass Sizzle sich nach Möglichkeit tatsächlich auf die integrierte Auswahl-Engine des Browsers verlässt. Wenn:text
es dem Selektor hinzugefügt wird, wird es zu einem nicht standardmäßigen CSS-Selektor und muss daher von Sizzle selbst behandelt werden. Dies bedeutet, dass Sizzle den aktuellen Wert des INPUT anstelle des im Quell-HTML angegebenen Attributs "value" überprüft.Es ist also eine clevere Möglichkeit, nach leeren Textfeldern zu suchen, aber ich denke, es beruht auf einem Verhalten, das für die Sizzle-Engine spezifisch ist (das Verwenden des aktuellen Werts von INPUT anstelle des im Quellcode definierten Attributs). Während Sizzle möglicherweise Elemente zurückgibt,
document.querySelectorAll
die diesem Selektor entsprechen, werden nur Elemente zurückgegeben, dievalue=""
im HTML enthalten sind. Vorbehalt Emptor.quelle
$("input[type=text][value=]")
Nachdem ich viele Versionen ausprobiert habe ich fand ich dies am logischsten.
Beachten Sie, dass zwischen
text
Groß- und Kleinschreibung unterschieden wird.quelle
Aufbauend auf der Antwort von @James Wiseman verwende ich Folgendes:
Dadurch werden Eingaben abgefangen, die nur Leerzeichen enthalten, zusätzlich zu denen, die "wirklich" leer sind.
Beispiel: http://jsfiddle.net/e9btdbyn/
quelle
Ich würde empfehlen:
quelle
<input value="">
wird noch übereinstimmen.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
), da Laravel kein 'Wert'-Attribut hinzufügt, wenn es leer ist. Also habe ich dann verwendet:$('input:text:not([value]):visible:enabled:first');
um das erste sichtbare leere aktivierte Texteingabefeld zu finden.Es gibt hier viele Antworten, die auf so etwas hinweisen,
[value=""]
aber ich denke nicht, dass das tatsächlich funktioniert. . . oder zumindest ist die Verwendung nicht konsistent. Ich versuche etwas Ähnliches zu tun, indem ich alle Eingaben mit IDs auswähle, die mit einer bestimmten Zeichenfolge beginnen und auch keinen eingegebenen Wert haben. Ich habe es versucht:aber es funktioniert nicht. Sie werden auch nicht umgekehrt. Sehen Sie diese Geige . Die einzigen Möglichkeiten, alle Eingaben mit IDs, die mit einer Zeichenfolge beginnen und keinen eingegebenen Wert haben, korrekt auszuwählen, waren:
und
aber offensichtlich machen die doppelten Negative das wirklich verwirrend. Wahrscheinlich ist die erste Antwort von Russ Cam (mit einer Filterfunktion) die klarste Methode.
quelle
Dadurch werden leere Texteingaben mit einer ID ausgewählt, die mit "txt" beginnt:
quelle
Da das Erstellen eines JQuery-Objekts für jeden Vergleich nicht effizient ist, verwenden Sie einfach:
Dann können Sie tun:
quelle