jQuery validate: проверка все еще выполняется после удаления правила (для выбранного элемента)

#jquery #jquery-validate

#jquery #jquery-validate

Вопрос:

Я динамически добавляю правила проверки при нажатии кнопки «Сохранить» — я делаю это для ввода текста и элемента выбора:

$(«#my-txt»).rules(«добавить», { обязательно: true, сообщения: { обязательно: «требуется текст»} });

$(«#my-ddl»).rules(«добавить», { требуется: true, сообщения: { требуется: «требуется выбор»} });

После добавления правил я вручную запускаю проверку ( .valid() ), а затем удаляю правила, выполнив .rules("remove") для элементов. Я делаю это, потому что хочу, чтобы ошибки сохранялись до тех пор, пока пользователь снова не нажмет «Сохранить» и проверка не будет запущена повторно.

Это работает нормально, и ошибки отображаются правильно… НО … хотя ошибка для ввода текста остается неизменной, несмотря ни на что, когда я нажимаю на выпадающий список, соответствующая ошибка исчезает (я вижу, что display: none вводится в промежуток, содержащий ошибку) независимо от любого выбора (она исчезает, как только я нажимаю на элемент управления, а не когда я выключаю табуляцию). Я бы ожидал, что ошибка выпадающего списка не будет скрыта, такая же, как в поле ввода текста.

Похоже, что правило на самом деле исчезло, потому что, если я вернусь и выберу значение по умолчанию для элемента select (значение =»»), оно не отобразит сообщение об ошибке.

Это озадачило меня — я пытаюсь найти способ заставить оба поля работать одинаково.

Любая помощь приветствуется!

Ответ №1:

Еще раз просмотрев API jquery-validate, я вижу, что нет возможности сохранить отображение ошибки, и разница в обработке отображения должна быть в коде плагина. Удачи в исправлении. 🙂

Другим способом исправить это было бы вручную сохранить то, что jquery-validate добавляет в ваш DOM, удалить его и повторно добавить самостоятельно.

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

Комментарии:

1. спасибо за вашу помощь — похоже, у меня проблемы. Я тоже предпочитаю этот подход (не нужно нажимать какую-либо кнопку), к сожалению, я не пишу требования ! 😉

Ответ №2:

помимо удаления этого требования с помощью функции jquery.validation, вы также можете удалить класс «required» из вашего элемента. при выполнении этого jquery.validation пропустит элемент, поскольку к нему не прикреплен требуемый класс.

Ответ №3:

вызов

 $('#formid').removeData('validator')
  

Это приведет к удалению проверки для формы

Комментарии:

1. Хай, это работает нормально… но что означает «валидатор». это статично или что-то значит ..?