Как вы и подозревали, вы не можете привязать проверку к любому входу, который еще не существует.
Я не вижу достаточного количества кода для демонстрации, поэтому ниже приведены некоторые обобщения:
Вам не нужно писать собственный метод для создания флажков required
с помощью этого плагина.Если флажки находятся в группе, совместно использующей один и тот же name
, то required
сделает по крайней мере один из группы обязательным.См .: jsfiddle.net / q357zcwy / 1 /
Весь смысл метода .rules()
заключается в динамическом добавлении правил удаления после того, как плагин уже был инициализированна форме.Таким образом, если вы динамически добавляете input
, то вызывайте .rules()
для этого input
после того, как было создано.См .: jsfiddle.net / q357zcwy / 2 /
Если вы хотите добавить только required
, то самый простой способ справиться с этим - поставить required="required"
атрибут на входе, а мой элемент № 2 выше отрицается.Вам не нужно беспокоиться о том, существует ли он или когда звонить .rules()
.Просто создайте input
, который включает этот атрибут, и плагин автоматически подберет его.См .: jsfiddle.net / q357zcwy / 3 /
<input type="checkbox" name="foo" required="required" ....
По умолчанию скрытые или невидимые поля всегда игнорируются.Если ваш плагин скрывает какие-либо поля, которые вы пытаетесь проверить, то вам нужно переопределить это поведение, используя опцию ignore
.Установите ignore
в []
(«ничто»), чтобы ничего не игнорировалось и все проверялось.
ignore: []
РЕДАКТИРОВАТЬ : больше заметок после просмотра ваш jsFiddle :
Метод .validate()
вызывается один раз для инициализации плагина на form
. Обычно при загрузке страницы .Однако он есть в функции, которая вызывается вашим обработчиком click
, что означает, что проверка не инициализируется до тех пор, пока не будет нажата кнопка, и повторно вызывается без необходимости каждый раз при нажатии кнопки.
Плагин DataTables действительно полностью удаляет строки при поиске / фильтрации таблицы.Хотя плагин проверки может обрабатывать невидимые или скрытые элементы (см. Пункт № 4 выше), никто не может разумно ожидать, что он будет обрабатывать элементы, которых больше нет в DOM.Мне кажется странным, что DataTables не может просто скрыть эти строки или сделать их невидимыми, а не полностью удалить.
Решение Яна интересно, поскольку оно перебирает объект DataTables, ища проверенные элементы,Однако, похоже, нет способа правильно интегрировать эту функцию в работу плагина jQuery Validate.В то время как плагин проверки обычно привязан к каждому входу и автоматически показывает / скрывает сообщения на основе правил, этот «обходной путь» неуклюже запихивается в submitHandler
, который обычно вызывается после форма действительна.Он также не может использовать стандартные сообщения проверки, highlight
, unhighlight
, success
, invalidHandler
или , а также другие встроенные функции .
может использовать способ showErrors
для программного отображения и скрытия сообщений по умолчанию на основе итерации объекта DataTables.Однако этот обходной путь будет слишком сложным.Вам также необходимо собрать имя (имена) проверенного объекта из объекта DataTable, чтобы узнать, какие сообщения переключать.Тогда, если ни одна из строк не существует, когда вы хотите проверить, вам нужно будет найти другой способ вызвать проверку.Поскольку почти все функциональные возможности плагина jQuery Validation по умолчанию будут перезаписаны, в действительности может иметь смысл написать собственную проверку формы с нуля.Никакой готовый плагин проверки не сможет обрабатывать элементы ввода, которые не существуют.