Jak zidentyfikować puste pola tekstowe za pomocą jQuery? Chciałbym to zrobić używając selektorów, jeśli to w ogóle możliwe. Muszę również wybrać identyfikator, ponieważ w rzeczywistym kodzie, w którym chcę tego użyć, nie chcę wybierać wszystkich danych wejściowych.
W poniższych dwóch przykładach kodu, pierwszy z nich dokładnie wyświetla wartość wpisaną przez użytkownika w polu tekstowym „txt2”. Drugi przykład wskazuje, że istnieje puste pole tekstowe, ale jeśli je wypełnisz, nadal uważa je za puste. Dlaczego to?
Czy można to zrobić za pomocą samych selektorów?
Ten kod zgłasza wartość w polu tekstowym „txt2”:
<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>
Ten kod zawsze zgłasza pole tekstowe „txt2” jako puste:
<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
źródło
źródło
Odpowiedzi:
Inny sposób
lub
lub
Działające demo
kod z wersji demonstracyjnej
jQuery
źródło
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
selector nie działa, ponieważ nie znajduje atrybutu value. Jednak technika .filter działa w tym scenariuszu.Możesz to również zrobić, definiując własny selektor:
A następnie uzyskaj do nich dostęp w ten sposób:
źródło
?
Nawiasem mówiąc, Twój telefon:
można znacznie uprościć i przyspieszyć dzięki:
źródło
Jak wspomniano w poście o najwyższym rankingu, poniższe elementy działają z silnikiem Sizzle.
W komentarzach zauważono, że usunięcie
:text
części selektora powoduje awarię selektora. Wierzę, że to, co się dzieje, polega na tym, że Sizzle faktycznie polega na wbudowanym silniku selektora przeglądarki, gdy to możliwe. Po:text
dodaniu do selektora staje się niestandardowym selektorem CSS i dlatego musi być obsługiwany przez samą Sizzle. Oznacza to, że Sizzle sprawdza bieżącą wartość INPUT zamiast atrybutu „value” określonego w źródłowym HTML.Jest to więc sprytny sposób sprawdzania pustych pól tekstowych, ale myślę, że opiera się on na zachowaniu specyficznym dla silnika Sizzle (czyli używaniu bieżącej wartości INPUT zamiast atrybutu zdefiniowanego w kodzie źródłowym). Chociaż Sizzle może zwrócić elementy pasujące do tego selektora,
document.querySelectorAll
zwróci tylko elementy, które mająvalue=""
w kodzie HTML. Caveat emptor.źródło
$("input[type=text][value=]")
Po wypróbowaniu wielu wersji uznałem to za najbardziej logiczne.
Zauważ, że
text
rozróżniana jest wielkość liter.źródło
Opierając się na odpowiedzi @Jamesa Wisemana, używam tego:
Spowoduje to przechwycenie danych wejściowych zawierających tylko białe znaki oprócz tych, które są „naprawdę” puste.
Przykład: http://jsfiddle.net/e9btdbyn/
źródło
Polecam:
źródło
<input value="">
nadal będą pasować.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
), Ponieważ Laravel nie dodaje atrybutu „wartość”, jeśli jest on pusty. Więc użyłem:$('input:text:not([value]):visible:enabled:first');
aby znaleźć pierwsze widoczne puste, włączone pole wprowadzania tekstu.Jest tu wiele odpowiedzi sugerujących coś takiego,
[value=""]
ale nie sądzę, aby to faktycznie działało. . . a przynajmniej użycie nie jest spójne. Próbuję zrobić coś podobnego, wybierając wszystkie dane wejściowe z identyfikatorami zaczynającymi się od określonego ciągu, który również nie ma wprowadzonej wartości. Próbowałem tego:ale to nie działa. Ani też ich odwrócenie. Zobacz to skrzypce . Jedyne sposoby, jakie znalazłem, aby poprawnie wybrać wszystkie dane wejściowe z identyfikatorami zaczynającymi się od ciągu i bez wprowadzonej wartości, to
i
ale oczywiście podwójne negatywy sprawiają, że jest to naprawdę zagmatwane. Prawdopodobnie pierwsza odpowiedź Russa Cama (z funkcją filtrującą) jest najbardziej przejrzystą metodą.
źródło
Spowoduje to wybranie pustych danych wejściowych z identyfikatorem zaczynającym się od „txt”:
źródło
Ponieważ tworzenie obiektu JQuery dla każdego porównania nie jest wydajne, wystarczy użyć:
Następnie możesz:
źródło