Удалите JQuery validationEngine из формы - PullRequest
3 голосов
/ 18 февраля 2010

Я использую Позиционирование Absolute jQuery validationEngine , но мне нужно удалить его после прикрепления к форме.

У меня есть 2 кнопки отправки в моей форме - одна для сохранения и одна для сохранения в виде черновика.

Я присоединяю validationEngine к форме при нажатии кнопки Сохранить. Если проверка не пройдена, и пользователь нажимает «Сохранить как черновик» (пройдя проверку), механизм проверки все еще присоединяется к форме с момента нажатия «Сохранить».

Что я хочу сделать, это:

  • позволяет пользователю попытаться сохранить
  • проверка не пройдена и отображается ошибка
  • и разрешить им нажимать кнопку «Сохранить как черновик» без проверки

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 июня 2010

Я добавил функцию внизу файла JavaScript validationEngine:

disable : function(formobj) {
    $(formobj).unbind("submit");
    $(formobj).die("submit");
    $(formobj).bind("submit", function() {
        return true;
    });
    $(formobj).live("submit", function() {
        return true;
    });
}

Вы передаете элемент формы jQuery. Конечно, вы могли бы сделать это вне javascript-файла validationEngine, я просто обнаружил, что проще объединить все вместе: -)

Важным моментом является то, что вы используете как unbind, так и die.

2 голосов
/ 18 февраля 2010

Создать глобальную переменную валидатора

var globalValidator = null

Выполните логок валидатора ----

Затем сбросьте согласно вашей логике, используя

function clearValidatorErrors(){
    if(globalValidator != null){
        globalValidator.resetForm(); 
    } 
}
1 голос
/ 09 июня 2010

Эта библиотека, похоже, не поддерживает развязывание во время выполнения (что довольно плохо, если вы спросите меня).

Вот код, который связывает 'submit'.

$(this).bind("submit", function(caller){   // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
    $.validationEngine.onSubmitValid = true;
    $.validationEngine.settings = settings;
    if($.validationEngine.submitValidation(this,settings) == false){
        if($.validationEngine.submitForm(this,settings) == true) {return false;}
    }else{
        settings.failure && settings.failure(); 
        return false;
    }       
})

Проблема в том, что если к этой форме подключено более одного обработчика события отправки, .unbind('submit') уничтожит все события, которые вы связали.

Предполагая, что событие было последним для привязки, вы можете удалить только последний обработчик события, прикрепленный для отправки:

 var events = $("#myForm").data('events');
 alert(events.submit.length); // should tell you how many events are bound..
 events.submit.splice(events.submit.length - 1, 1); // strip the last event
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...