Как определить пустые текстовые поля с помощью jQuery? Я бы хотел сделать это с помощью селекторов, если это вообще возможно. Кроме того, я должен выбрать идентификатор, так как в реальном коде, где я хочу его использовать, я не хочу выбирать все текстовые поля.
В следующих двух примерах кода первый точно отображает значение, введенное пользователем в текстовое поле «txt2». Во втором примере показано, что текстовое поле пустое, но если вы его заполните, оно все равно будет считаться пустым. Почему это?
Можно ли это сделать, используя только селекторы?
Этот код сообщает значение в текстовом поле «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>
Этот код всегда сообщает текстовое поле "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() {
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
источник
источник
Ответы:
По-другому
или
или
Рабочая демонстрация
код из демонстрации
jQuery
источник
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
селектор не работает, поскольку он не находит атрибут значения. Однако метод .filter действительно работает в этом сценарии.Вы также можете сделать это, определив свой собственный селектор:
А затем получить к ним доступ следующим образом:
источник
?
Кстати, ваш звонок:
можно значительно упростить и ускорить с помощью:
источник
Как упоминалось в посте с самым высоким рейтингом, с движком Sizzle работает следующее.
В комментариях было отмечено, что удаление
:text
части селектора приводит к сбою селектора. Я считаю, что происходит то, что Sizzle по возможности полагается на встроенный в браузер механизм выбора. Когда:text
он добавляется к селектору, он становится нестандартным селектором CSS и, следовательно, должен обрабатываться самим Sizzle. Это означает, что Sizzle проверяет текущее значение INPUT вместо атрибута «value», указанного в исходном HTML.Так что это умный способ проверить пустые текстовые поля, но я думаю, что он полагается на поведение, специфичное для движка Sizzle (то есть использование текущего значения INPUT вместо атрибута, определенного в исходном коде). Хотя Sizzle может возвращать элементы, соответствующие этому селектору,
document.querySelectorAll
вернет только те элементы, которые естьvalue=""
в HTML. Пусть покупатель будет бдителен.источник
$("input[type=text][value=]")
После пробовать много версии я это нашел наиболее логичным.
Обратите внимание, что
text
это чувствительно к регистру.источник
Основываясь на ответе @James Wiseman, я использую это:
Это перехватит входы, которые содержат только пробелы в дополнение к тем, которые «действительно» пусты.
Пример: http://jsfiddle.net/e9btdbyn/
источник
Я бы рекомендовал:
источник
<input value="">
все равно будет совпадать.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
), потому что Laravel не добавляет атрибут «значение», если он пуст. Поэтому я затем использовал:$('input:text:not([value]):visible:enabled:first');
чтобы найти первое видимое пустое активированное поле ввода текста.Здесь много ответов, предлагающих что-то вроде,
[value=""]
но я не думаю, что это действительно работает. . . или, по крайней мере, использование непоследовательно. Я пытаюсь сделать что-то подобное, выбирая все входы с идентификаторами, начинающимися с определенной строки, которая также не имеет введенного значения. Я пробовал это:но это не работает. И не обратить их вспять. Посмотри на эту скрипку . Единственными способами, которые я нашел для правильного выбора всех входов с идентификаторами, начинающимися со строки и без введенного значения, были
и
но очевидно, что двойное отрицание действительно сбивает с толку. Наверное, первый ответ Расс Кэма (с функцией фильтрации) - самый понятный метод.
источник
Это выберет пустые текстовые поля с идентификатором, начинающимся с «txt»:
источник
Поскольку создание объекта JQuery для каждого сравнения неэффективно, просто используйте:
Тогда вы сможете:
источник