jquery.validate.unobtrusive не работает с динамически внедренными элементами - PullRequest
97 голосов
/ 10 декабря 2010

Я работаю с ASP.Net MVC3, более простой способ использовать проверку клиента - включить jquery.validate.unobtrusive.Все работает отлично, для вещей, которые прямо с сервера.

Но когда я пытался ввести какие-то новые «входы» с помощью javascript, я знал, что мне нужно вызвать $.validator.unobtrusive.parse() для повторной проверки.Но все же, все эти динамические введенные поля не функционируют.

Еще хуже, я пытаюсь связать вручную, используя jquery.validate, и это тоже не работает.Есть мысли?

Ответы [ 12 ]

0 голосов
/ 19 марта 2013

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

Я не уверен, изменилось бы это поведениев более новых версиях jquery (мы используем 1.7.2), так как этот поток был создан или прокомментирован последним, но я обнаружил, что .parseElement(inputElement) работает нормально, когда я пытаюсь добавить динамически созданные элементы в форму, в которой уже загружен валидатор.Это уже было предложено @jamesfm (15 февраля '11) в одном из комментариев выше, но я пропустил это в первые несколько раз, когда работал над этим.Поэтому я добавляю его как отдельный ответ, чтобы сделать его более очевидным, и потому что я думаю, что это хорошее решение и не требует больших накладных расходов.Это может не относиться ко всем вопросам, поднятым в последующих ответах, но я думаю, что это будет решением исходного вопроса.Вот как я получил мою работу:

//row & textarea created dynamically by an async ajax call further up in the code
var row = ...; //row reference from somewhere
var textarea = row.find("textarea");
textarea.val("[someValue]");

//add max length rule to the text area
textarea.rules('add', {
    maxlength: 2000
});
//parse the element to enable the validation on the dynamically added element
$.validator.unobtrusive.parseElement(textarea);
0 голосов
/ 21 декабря 2010

Во-первых, я думаю, что вызов должен быть .validator, а не подтверждать, тогда вам нужно передать идентификатор формы

$.validator.unobtrusive.parse("#id");
...