Проверка формы с использованием Javascript и «неопределенной» проблемы - PullRequest
0 голосов
/ 17 января 2011

Я строю проверку формы с кодом ниже. Это работает, но если заполнено какое-то из обязательных полей, var msg содержит неопределенное значение.

Например, если имя пользователя заполнено, но пароль не содержит var msg 'Undefinied' Поле обязательно для заполнения

Как этого избежать?

Вот код:

var i = 0;
var error_msg = [];
var msg = ;

var errors = {
    'username' : 'Field is required',
    'password' : 'Field is requred',
    'city'     : 'City is required'
    etc...... etc... 
};

for(var x in errors) {
    i++;
    if(!$('#'+x).val()) {
        error_msg[i] = errors[x];
    }   
}
if(error_msg.length > 0) {

    for(var x = 0; x < errors_msg.length; x++) {

        msg += errors_msg[x] +"\n";
    }
}

Ответы [ 3 ]

4 голосов
/ 17 января 2011

Я вижу следующее:

var msg = ;

Должен (может) быть

var msg = "";

Вы также пытались:

alert($('#'+x).length);

Чтобы узнать,JQuery находит элемент?(если он возвращает 0, то он не найден)

2 голосов
/ 17 января 2011

ОК, кроме явно разорванного цикла for in и отсутствующего назначения msg.

Это ваша актуальная проблема:

var error_msg = []; // new empty array

for(var x in errors) {
    i++; // i starts with 1 this way!
    // other code
}

То есть вы никогда не устанавливаете 0-й индекс. Да, массивы начинаются с индекса 0. Поэтому, если вы установите индекс, который больше текущей длины массива, JavaScript вставит недостающие элементы перед этим индексом.

В вашем случае JavaScript вставит значение по умолчанию undefined в индекс 0, поскольку первый установленный вами индекс - 1.

Крепежный

var error_msg = [];
for(var x in errors) {
    if (errors.hasOwnProperty(x)) { // see note below
        if(!$('#'+x).val()) {
            error_msg.push(errors[x]); // append to the array
        }
    }
}

var msg = error_msg.join('\n'); // no need for an if, will be empty if there are no errors.

Примечание: См. hasOwnProperty

0 голосов
/ 17 января 2011

Это не ваша проблема, и поэтому это не совсем ответ, но комментарии не очень хорошо поддерживают код:

if(error_msg.length > 0) {

    for(var x = 0; x < errors_msg.length; x++) {

        msg += errors_msg[x] +"\n";
    }
}

Для дальнейшего использования вам не нужно писать этот код:

msg = errors_msg.join('\n');

делает то же самое.

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