Плагин проверки jQuery: как я могу рассматривать ошибки как предупреждения и разрешать отправку формы? - PullRequest
9 голосов
/ 07 апреля 2011

, как предполагает субъект, я использую плагин проверки bassistance.de (http://docs.jquery.com/Plugins/Validation/), и я хотел бы иметь возможность отправить форму даже при наличии ошибок валидации. По сути, мы хотим использовать только плагин чтобы предупредить пользователя о потенциальных проблемах (пожалуйста, не подвергайте сомнению проблемы с юзабилити, я знаю).

Итак, есть ли способ сделать это легко или я должен взломать код плагина?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

Я столкнулся с подобной проблемой, я решил использовать свойство options.ignore. http://docs.jquery.com/Plugins/Validation/validate#toptions

$("form").validate({
  rules: {
    "hard": {word_count:10}, // No more than 10 words
    "soft_and_hard": {word_count:[30,10]} // No more than 40 words
  },
  ignore: ".error-okay"
});

Я использовал собственный валидатор для подсчета слов. Было решено, что мы должны отобразить ошибку после X слов (количество слов, которое они запрашивали), и не позволять отправлять форму, если у них есть X + T слов. Когда между словами X и X + T было написано, я бы добавил к элементу класс «error-okay» (где «.error-okay» - это то, что я передал в качестве параметра игнорирования).

jQuery.validator.addMethod("word_count", function(value, element, max) {
    var tolerance = 0;
    if (max instanceof Array){
        tolerance = max[1];
        max = max[0];
    }
    var typedWords = jQuery.trim(value).split(' ').length;

    if(typedWords <= max + tolerance) $(element).addClass("error-okay");
    else $(element).removeClass("error-okay");

    return (typedWords <= max);
}, function(max, ele){
    var tolerance = "";
    if (max instanceof Array){
        tolerance = "<br/>Definitly no more than " + ( max[0] + max[1] ) + " words.";
        max = max[0];
    }
    return "Please enter " + max +" words or fewer. You've entered " +
            jQuery.trim($(ele).val()).split(' ').length + " words." + tolerance;
});

Если у вас есть несколько проверок на поле, вам, вероятно, лучше написать функцию invalidHandler, возможно, комбинируя ее с добавленными классами, как я использовал (например: "word-count-okay").

4 голосов
/ 07 апреля 2011

Я не буду подвергать сомнению вопросы удобства использования :). Это действительно возможно при использовании опции invalidHandler для проверки:

$("#test-form").validate({
    invalidHandler: function() {
        /* Allow the user to see the error messages before submitting: */
        window.setTimeout(function() { 
            $("#test-form")[0].submit();
        }, 1000);
    }
});

Вот пример: http://jsfiddle.net/ghDbd/

...