Проверьте, являются ли входные данные пустыми, используя jQuery

373

У меня есть форма, в которой я бы хотел, чтобы все поля были заполнены. Если в поле щелкнуть и не заполнить, я хотел бы отобразить красный фон.

Вот мой код:

$('#apply-form input').blur(function () {
  if ($('input:text').is(":empty")) {
    $(this).parents('p').addClass('warning');
  }
});

Он применяет класс предупреждения независимо от заполняемого поля или нет.

Что я делаю неправильно?

Теги:
validation

16 ответов

645
Лучший ответ
$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    }
});

И вам не обязательно нужно .length или посмотреть, есть ли он >0, поскольку пустая строка все равно равно false, но если вы хотите в целях чтения:

$('#apply-form input').blur(function()
{
    if( $(this).val().length === 0 ) {
        $(this).parents('p').addClass('warning');
    }
});

Если вы уверены, что он всегда будет работать с элементом текстового поля, вы можете просто использовать this.value.

$('#apply-form input').blur(function()
{
      if( !this.value ) {
            $(this).parents('p').addClass('warning');
      }
});

Также обратите внимание, что $('input:text') захватывает несколько элементов, задает контекст или использует ключевое слово this, если вы просто хотите ссылку на одиночный элемент (при условии, что в текстовом поле есть потомки/дети).

  • 2
    Я думаю, что это будет работать лучше, если вы измените с: if (! $ (This) .val ()) на: if (! $ (This) .val () && $ (this) .val ()! = "" )
  • 2
    $ (this) .val (). length <1
Показать ещё 2 комментария
128

У всех есть правильная идея, но мне нравится быть немного более явным и обрезать значения.

$('#apply-form input').blur(function() {
     if(!$.trim(this.value).length) { // zero-length string AFTER a trim
            $(this).parents('p').addClass('warning');
     }
});

если вы не используете .length, тогда запись '0' может быть помечена как плохая, а запись из 5 пробелов может быть отмечена как ok без $.trim. Лучшее из удачи.

  • 16
    Совершенно верно. Обрезка необходима, особенно при использовании привередливых WYSIWYG-редакторов (например, jWYSIWYG).
  • 0
    Могу ли я предложить изменить значение на val ---> if (! $. Trim (this.val) .length) {// строка нулевой длины ПОСЛЕ трима $ (this) .parents ('p'). AddClass (' предупреждение'); }
Показать ещё 1 комментарий
28

Выполнение этого размытия слишком ограничено. Предполагается, что основное внимание уделяется области формы, поэтому я предпочитаю делать это при отправке и сопоставлять входные данные. После долгих лет работы с причудливыми размытиями, фокусом и т.д. Трюки, упрощая вещи, вы получите больше удобства использования там, где это возможно.

$('#signupform').submit(function() {
    var errors = 0;
    $("#signupform :input").map(function(){
         if( !$(this).val() ) {
              $(this).parents('td').addClass('warning');
              errors++;
        } else if ($(this).val()) {
              $(this).parents('td').removeClass('warning');
        }   
    });
    if(errors > 0){
        $('#errorwarn').text("All fields are required");
        return false;
    }
    // do the ajax..    
});
16
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}
  • 0
    Uncaught TypeError: Невозможно прочитать свойство 'length' из неопределенного
  • 0
    @ChuckD Я получаю ту же ошибку и обнаружил, что пропускаю $ in if (('input:text').val().length == 0) { и должно быть if ($('input:text').val().length == 0) {
8

почему никто не упоминает

$(this).filter('[value=]').addClass('warning');

кажется мне более похожим на jQuery

  • 3
    Это не работает в jQuery 1.9+, так как они изменили работу фильтра селектора. Jsfiddle.net/6r3Rk
  • 2
    Я предлагаю $ (this) .not ('[value]'). AddClass ('warning') для 1.9 jsfiddle.net/znZ9e
Показать ещё 1 комментарий
6

вы также можете использовать.

$('#apply-form input').blur(function()
{
    if( $(this).val() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});

Если у вас есть сомнения относительно пробелов, попробуйте.

$('#apply-form input').blur(function()
{
    if( $(this).val().trim() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});
  • 2
    проголосовал за обрезку
3

function checkForm() {
  return $('input[type=text]').filter(function () {
    return $(this).val().length === 0;
  }).length;
}
3

Есть еще одна вещь, о которой вы могли бы подумать. В настоящее время она может добавлять класс предупреждения только в том случае, если она пуста, и как удалить класс снова, когда форма больше не пуста.

вот так:

$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    } else if ($(this).val()) {
          $(this).parents('p').removeClass('warning');
    }
});
3

Псевдо-селектор :empty используется, чтобы увидеть, не содержит ли элемент никаких дочерних элементов, вы должны проверить значение:

$('#apply-form input').blur(function() {
     if(!this.value) { // zero-length string
            $(this).parents('p').addClass('warning');
     }
});
3

Вместо этого используйте плагин проверки jQuery. Это может быть немного избыточно для простых обязательных полей, но достаточно зрело, что он обрабатывает граничные случаи, о которых вы даже не думали (и никто из нас не дошел бы до них).

Вы можете пометить обязательные поля классом "required", запустить $('form'). validate() в $(document).ready() и все, что требуется.

Он даже размещался на Microsoft CDN, для быстрой доставки: http://www.asp.net/ajaxlibrary/CDN.ashx

2

Вот пример использования keyup для выбранного ввода. Он также использует обрезку, чтобы убедиться, что последовательность только символов пробела не вызывает правдивого ответа. Это пример, который можно использовать для запуска окна поиска или что-то, связанного с этим типом функций.

YourObjNameSpace.yourJqueryInputElement.keyup(function (e){
   if($.trim($(this).val())){
       // trimmed value is truthy meaning real characters are entered
    }else{
       // trimmed value is falsey meaning empty input excluding just whitespace characters
    }
}
1
$(function() {
  var fields = $('#search_form').serializeArray();
  is_blank = true;
  for (var i = 0; i < fields.length; i++) {
    // excluded fields
    if ((fields[i].name != "locale") && (fields[i].name != "utf8")) {
      if (fields[i].value) {
        is_blank = false;
      }
    }
  }
  if (is_blank) {
    $('#filters-button').append(': OFF');
  }
  else {
    $('#filters-button').append(': ON');
  }
});

Убедитесь, что все поля пусты и добавлены или отключены в Filter_button

0

Событие keyup обнаружит, удалил ли пользователь также поле (backspace), но backspace не вызывает событие нажатия клавиши в IE)

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

if (!this.value) {
    alert('The box is empty');
}});
  • 0
    очень элегантный, мне нравится этот!
0

С HTML 5 мы можем использовать новую функцию "требуется", просто добавим ее в тег, который вы хотите, например:

<input type='text' required>

  • 2
    ОП спрашивает JQuery
  • 2
    И все браузеры не поддерживают это ... Вы должны добавить проверку JS И проверку сервера
Показать ещё 1 комментарий
0
<script type="text/javascript">
$('input:text, input:password, textarea').blur(function()
    {
          var check = $(this).val();
          if(check == '')
          {
                $(this).parent().addClass('ym-error');
          }
          else
          {
                $(this).parent().removeClass('ym-error');  
          }
    });
 </script>// :)
  • 0
    Вы, вероятно, должны также обрезать пробелы.
0

Вы можете попробовать что-то вроде этого:

$('#apply-form input[value!=""]').blur(function() {
    $(this).parents('p').addClass('warning');
});

Он будет применять событие .blur() только к входам с пустыми значениями.

  • 0
    Хорошее решение, но имейте в виду, что это работает только в том случае, если входной сигнал не пуст при вызове функции, а также только в том случае, если значение сохраняется в атрибуте входного значения «value».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню