Использование массива переменных для создания событий размытия jQuery

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

Я создал цикл for с созданием события размытия и предупреждением, чтобы убедиться, что размытие создается для этого поля. Предупреждение сообщает, что во все поля добавлена ​​проверка, но когда я иду проверять его на странице, независимо от того, какое поле я оставляю, событие размытия проверяет только последнее поле в массиве.

Вот функция.

function SetErrorFields(fields) {
    var ErrorFields = fields;

    for (Field in ErrorFields) {
        alert("Field: "+ErrorFields[Field][0]+" | Validations: "+ErrorFields[Field][1]);
        $('#'+ErrorFields[Field][0]).blur(function(){
            Validate(ErrorFields[Field][0],ErrorFields[Field][1]);
        });
    }

}

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

Изменено ErrorFields[Field][0] на Field[0], но это меняет все в предупреждении на «неопределенное».

Использование следующего кода вызывает ошибки «x is undefined» при выходе из поля.

for (x=0; x<ErrorFields.length; x++) {
    alert("Field: "+ErrorFields[x][0]+" | Validations: "+ErrorFields[x][1]);
    $('#'+ErrorFields[x][0]).blur(function(){
        Validate(ErrorFields[x][0],ErrorFields[x][1]);
    });
}

И я не могу понять каждый метод.


person nroscoe    schedule 22.06.2011    source источник
comment
Меня никогда не перестает забавлять, что после публикации проблемы я нахожу решение. Выложу в ближайшее время.   -  person nroscoe    schedule 22.06.2011


Ответы (1)


Существует полезный параметр, который называется eventData. Он позволяет отправлять данные в событие, когда оно объявлено. Ниже работает.

function SetErrorFields(fields) {
    ErrorFields = fields;
    for (Field in ErrorFields) {
        alert(ErrorFields[Field][0]+" | "+ErrorFields[Field][1]+" | "+$('#'+ErrorFields[Field][0]).val());
        $('#'+ErrorFields[Field][0]).blur({fld: ErrorFields[Field][0], err: ErrorFields[Field][1]}, function(event){
            Validate(event.data.fld,event.data.err);
        });
    }

}

Более подробное объяснение того, что это такое, можно найти здесь.

person nroscoe    schedule 23.06.2011