Я работаю ASP.Net MVC3
, более простой способ использовать проверку клиента - это включить jquery.validate.unobtrusive
. Все работает нормально, если что-то прямо с сервера.
Но когда я пытаюсь ввести несколько новых «входов» с помощью javascript, я знал, что мне нужно позвонить, $.validator.unobtrusive.parse()
чтобы повторно привязать проверки. Но все же все эти динамически вводимые поля не работают.
Хуже того, я пытаюсь вручную привязать using, jquery.validate
но это тоже не работает. Есть предположения?
Ответы:
Я создал расширение для библиотеки jquery.validate.unobtrusive, которое решило эту проблему для моей ситуации - это может быть интересно.
http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
источник
$.validator.unobtrusive.parse()
. Кроме того, похоже, что он только добавляет новые правила, но не обновляет существующие?Я попробовал подход Xhalent, но, к сожалению, у меня он не сработал. Подход Робина работал и не работал. Он отлично работал с динамически добавляемыми элементами, но если вы попытаетесь использовать JQuery для удаления всех атрибутов проверки и промежутков из DOM, библиотека проверки все равно попытается их проверить.
Однако, если вы удалите данные unobtrusiveValidation формы в дополнение к validationData, это сработает как чудо для динамического добавления и удаления элементов, которые вы хотите проверить или не проверить.
источник
validator
что не определен? У меня есть как проверка, так и проверка. Ненавязчивые ссылки. Проверка работает, пока я не назову этот код$('#form').validate({ignore: ""})
Мне действительно нравится простота решения @viggity и @Robins, поэтому я превратил его в небольшой плагин:
Пример использования:
источник
У меня такая же проблема. Я обнаружил, что невозможно вызвать $ .validator.unobtrusive.parse () в одной и той же форме дважды. При первоначальной загрузке формы с сервера форма автоматически анализируется ненавязчивой библиотекой. Когда вы динамически добавляете элемент ввода в форму и снова вызываете $ .validator.unobtrusive.parse (), это не сработает. То же самое и с parseElement ().
Ненавязчивая библиотека вызывает метод проверки плагина проверки jquery, чтобы установить все правила и сообщения. Проблема в том, что при повторном вызове плагин не обновляет заданный им новый набор правил.
Я нашел одно грубое решение: перед вызовом метода синтаксического анализа в ненавязчивой библиотеке я выбрасываю валидатор формы:
Теперь, когда ненавязчивая библиотека вызывает метод проверки, все правила и сообщения воссоздаются, включая динамически добавленные входные данные.
Надеюсь это поможет
источник
Я использую MVC 4 и JQuery 1.8, похоже, что следующий фрагмент кода необходим для включения JQuery для проверки динамически вводимого содержимого через Ajax или JQuery в DOM.
Я создал модульную функцию, которая принимает объект JQuery вновь добавленного элемента. Если вы клонировали новую таблицу с идентификатором,
tblContacts
используя JQuery при нажатии кнопки, включите указанную ниже функцию в свой файл js.и назовите это так:
источник
Почему бы не использовать функцию правил непосредственно из документа проверки jquery. Как это:
источник
Взяв решение Xhalent, отмеченное как ответ выше, я немного расширил его.
Таким образом, в основном он по-прежнему работает так же, как решение Xhalent, описанное выше, но я добавил возможность удалять правила для элементов, которые вы удаляете из dom. Итак, когда вы удаляете элементы из Dom и хотите, чтобы эти правила проверки также были удалены, вызовите:
источник
Я нашел кодовый скрипт @ Xhalent в своем коде и собирался удалить его, потому что я его не использовал, что привело меня к этому вопросу SO.
Этот код довольно чистый и простой:
Затем, чтобы вызвать это расширение jQuery, просто используйте селектор, чтобы захватить вашу форму:
Альт!
источник
Я попробовал ответить viggity, и сначала все, казалось, работало. Но через некоторое время я заметил, что проверка становится мучительно медленной, если добавить более динамично добавленные элементы. Причина в том, что его решение не отвязывает обработчики событий, а каждый раз добавляет новые. Поэтому, если вы добавляете 5 элементов, проверка выполняется 6 раз, а не только один раз. Чтобы исправить это, вы должны отвязать события в дополнение к вызовам removeData.
источник
В случае динамического содержимого вам необходимо обновить ненавязчивые проверки, как показано ниже, и проверить,
Form
действительно ли он действителен при отправке.источник
Некоторое время я возился с этим, отбрасывая решения и пробуя снова позже (когда у меня было немного свободного времени, хотите верьте, хотите нет).
Я не уверен, изменилось бы это поведение в более новых версиях jquery (мы используем 1.7.2), поскольку этот поток был создан или прокомментирован последним, но я обнаружил, что он
.parseElement(inputElement)
отлично работает, когда я пытаюсь добавить динамически созданные элементы в форму в котором уже загружен валидатор. Это уже было предложено @jamesfm (15 февраля 2011 г.) в одном из комментариев выше, но я упустил это из виду в первые несколько раз, когда работал над этим. Поэтому я добавляю его как отдельный ответ, чтобы сделать его более очевидным и потому, что я думаю, что это хорошее решение и не требует так много накладных расходов. Возможно, это не относится ко всем вопросам, поднятым в последующих ответах, но я думаю, что это было бы решение исходного вопроса. Вот как я заработал:источник
Во-первых, я думаю, что вызов должен быть на .validator, а не на проверку, тогда вам нужно передать идентификатор формы
источник
Если вам нужно добавить или удалить что-то с возможностью того, что некоторые ошибки уже отображаются, я пришел с этим. Он основан в основном на разных идеях на этой странице вопроса. Я использую встроенный
destroy()
вместо того, чтобы просто удалять атрибут данных для проверки JQuery.Вы вызываете его перед динамическим изменением входных данных в форме. Затем вы повторно инициализируете проверку после.
Примечание. Если некоторые или все входные данные были проверены и содержат ошибки, эти ошибки будут сброшены ... но они вернутся правильно при следующей проверке.
источник