JQuery: Как проверить, существует ли значение в массиве? - PullRequest
0 голосов
/ 21 мая 2010

Я пытаюсь написать простой плагин для проверки полей ввода в данный момент (на самом деле это больше упражнение для обучения) и подумал, что это не будет слишком сложно, поскольку все, что мне нужно сделать, это:

  1. Получить поля ввода
  2. Храните их в массиве с каждым значение
  3. При отправке формы проверьте массив содержит любые пустые строки

Но мне кажется, что я не могу написать что-то, что проверяет пустую строку (читай: ввод без текста внутри) внутри моего массива.

Вот код, который у меня есть:

var form = $(this), // passed in form element
    inputs = form.find('input'), // all of this forms input fields
    isValid = false; // initially set the form to not be valid


function validate() {
    var fields = inputs.serializeArray(); // make an array out of input fields

    // start -- this does not work
    for (var n in fields) {
        if (fields[n].value == "") {
            isValid = false;
            console.log('failed');
        } else {
            isValid = true;
            console.log('passed');
        };
    }
    // end -- this does not work

}; // close validate()

// TRIGGERS
inputs.live('keyup blur', function(event) {
    validate();
});

Любая помощь с тем, как я могу проверить, является ли одно из полей пустым и, если это так, возврат isValid = false будет очень признателен.

Я также играл с $.inArray("", fields), но он никогда не вернул бы 0 или 1, даже если console.log показал, что поля не имеют значения.

Спасибо за чтение.

Ответы [ 3 ]

4 голосов
/ 21 мая 2010

Если вы ищете синтаксис в стиле more-jQuery, вы можете заменить цикл for, используя:

var isValid = true;  // default to valid

$.each(fields, function(i, field){
    if(field.value == '') {
        console.log('failed');   
        isValid = false; 
    } else {
        console.log('passed');
    }
});
4 голосов
/ 21 мая 2010

Если первое поле пустое, а второе нет, вы перезапишете переменную isValid таким образом.Вы можете break; цикл for после получения первой пустой переменной.

0 голосов
/ 21 мая 2010

Вы можете заменить всю функцию validate более простой проверкой:

function validate() {
    var blankInputs = inputs.filter(function() {
        return this.value === ''; 
    });

    isValid = blankInputs.length === 0; // If there are none, the form is valid

} // close validate()

Обратите внимание на использование оператора строгого равенства ===. Хорошей практикой является почти всегда использовать это вместо ==, но это особенно актуально для значений, которые действуют ложно (оцените как false, когда вы говорите if (value)). == может дать вам очень неожиданное поведение в этих случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...