JQuery удалить validationEngine во время выполнения - PullRequest
1 голос
/ 23 февраля 2012

Я использую скрипт validationEngine для проверки формы. Я начинаю это с:

$("#formid").validationEngine();

Я действительно не отправляю форму через кнопку отправки. Я использую элемент привязки с событием onclick, которое вызывает функцию saveElement(). В этой функции я вызываю:

$("#formid").validationEngine('validate');

, который работает просто отлично.

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

Чтобы эти ошибки не возникали, я бы хотел удалить validationEngine из элемента формы. Но я просто не могу это удалить. Я пробовал разные варианты, включая приведенные ниже, но ни один из них не работал.

$('#formid').validationEngine('hideAll'); // To hide the error messages
$('#formid').validationEngine('detach');  // To remove the validationEngine

У кого-нибудь есть предложения, как я могу удалить validationEngine?

Обход

Это действительно похоже на то, что нет способа отмены привязки. Я добавил проблему в проект github. Может быть, они реализуют метод unbind: https://github.com/posabsolute/jQuery-Validation-Engine/issues/287

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

  • Используйте jQuery.clone (), чтобы скопировать форму без событий, удалить исходную форму и снова добавить в форму validationEngine
  • Удалите проверочные классы для элементов формы, сохраните их в массиве и вставьте снова после сброса формы

Все еще открыто

Может быть, есть лучшее решение или обходной путь. Если вы знаете, пожалуйста, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 25 августа 2014

Эта проблема до сих пор не устранена.Мне нужно было отключить проверку в существующем приложении, чтобы позволить событиям обратной передачи происходить без проверки формы.Я успешно сделал это, удалив классы проверки с помощью регулярного выражения, подобного этому:

// Work around
$('[class*="validate"]').each(function () {
      var _this = $(this);
      _this.attr("class", _this.attr("class").replace(/validate\[.*]+\s?/, ""));
});
1 голос
/ 23 февраля 2012

Я думаю, что ты действительно слишком силен.Возможно, это не тот ответ, который вы ожидали, но я думаю, что вам следует сделать следующее:

Во-первых, на элементе привязки для отправки сделайте следующее:

$('#anchorElement').click(function() {
    $('#formid').submit()
})

Затем вы можетесделайте так, чтобы удалить форму после отправки:

$('#formid').submit(function() {
    // Do your submitting stuff, like validating.
    $(this).remove()
    // Or use $(this).hide() if you simply want to hide it.
})

Но я бы не стал защищать метод использования элемента привязки.Приятная деградация является обязательным требованием почти для каждого веб-сайта.

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

Кстати, похоже, что естьнет «связывания» валидации двигателя.Смотрите решение здесь: Удалите JQuery validationEngine из формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...