Проверка jQuery для динамических элементов управления на стороне клиента

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

$("#dynamicControlID").rules("add", {required:true});

Проблема возникает, когда я пытаюсь проверить форму. Когда я звоню

$("#form1").validate()

любые нединамические элементы управления, для которых указан класс «обязательный», будут проверены с красивым сообщением, в котором говорится, что «это поле является обязательным». Элементы управления, добавленные динамически, не отображают никаких сообщений, а функция проверки возвращает значение true, даже если они пусты. Настоящая путаница возникает, когда я проверяю динамические элементы управления по отдельности. если я позвоню

$("#dynamicControlID").valid()

он вернет false и отобразит сообщение об ошибке на входе. я звоню

$("#form1").valid()

прежде чем я сделаю что-нибудь с динамическим управлением.

Я что-то упустил здесь? Я хотел бы позвонить

$("#form1").valid() 

и отображать сообщения об ошибках для всех моих динамически добавленных элементов управления.


person lucrativelucas    schedule 17.01.2012    source источник
comment
Все эти фигурные кавычки... их нет в вашем производственном коде, не так ли?   -  person Sparky    schedule 18.01.2012
comment
Я напечатал свой вопрос в слове :-D   -  person lucrativelucas    schedule 18.01.2012


Ответы (2)


Вы на правильном пути, но когда вы хотите добавить правила к новому элементу, вы уже должны вызывать $('#form1').validate();.

Таким образом, общая установка выглядит примерно так:

$('#form1').validate({
   //your options
});

$('#dynamicControlID').rules('add',{required:true});
person Ryley    schedule 18.01.2012
comment
Спасибо, это именно то, чего мне не хватало! - person lucrativelucas; 31.01.2012

Вы пытались создать правила проверки после того, как элементы управления были добавлены в форму?

Вы можете настроить проверку при загрузке страницы и сохранить ее в переменной, а также динамически добавлять к ней правила следующим образом:

var validator = $("#form1").validate(rules:{});

После добавления динамического элемента управления в форму..

validator.settings.rules.new_control_name = { required: true };

Затем при отправке формы:

if($("#form1").valid()){
    // valid
}
person Troy Barlow    schedule 17.01.2012
comment
Я пробовал это, но то же самое. Я зашел в отладчик javascript в Chrome, и «validator.settings.rules» вернул список всех правил, которые я установил. Все поля были обязательными, но 'validator.valid()' по-прежнему возвращает true. - person lucrativelucas; 18.01.2012
comment
Можете ли вы предоставить свой html и js, пожалуйста? - person Troy Barlow; 18.01.2012