ОК, кроме явно разорванного цикла 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