2013-11-28 3 views
0

Я использую следующий скрипт Jquery Validator;Подтвердить отдельные вкладки Плагин Jquery Validator

jQuery.validator.addMethod("letras", function (value, element) { 
    return this.optional(element) || value == value.match(/^[a-zA-Z ñÑáéíóúüç]+$/); 
}, "Only letters."); 

$(document).ready(function() { 

     $('#inscripcion').validate({ 

       errorClass: 'form-control-error', 
       validClass: 'form-control-sucess', 
       ignore: "", 

       submitHandler: function (form) { 
        if ($("#inscripcion").validate() == true) { 
         alert("Form not completed"); 
        } else { 
         form.submit(); 
        } 
       }, 

       rules: { 

        nombrer: { 
         minlength: 2, 
         letras: true, 
         required: true 
        }, 
        apellidor: { 
         minlength: 2, 
         required: true 
        }, 
        cedular: { 
         minlength: 7, 
         number: true, 
         required: true 
        }, 

        highlight: function (element) { 
         $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); 
        }, 

        success: function (element) { 
         $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); 

        } 
       }); 
     }); // end document.ready 

    $('#menu a[href="#estudiante"]').click(function (event) { 
     var estado = $('#inscripcion').valid(); 
     if (estado == false) { 
      alert("You miss some data please complete it"); 
     } 
    }); 

    $('#botonestu').click(function (event) { 
     var estado = $('#inscripcion').valid(); 
     if (estado == false) { 
      alert("You miss some data please complete it"); 
     } 
    }); 

Проблема заключается в том, что если я использую «игнорировать": ",» события, которые я сделал для того, когда кто-то нажимает на вкладку или кнопку активирует даже если вкладка especified полна. Но если я удалю кого-нибудь, можно нажать кнопку отправки напрямую, и она представит всю форму, даже если она будет пустой. А также «alert» в submitHandler его не работает даже в form.submit().

+0

Показать достаточно HTML для создания краткого примера. – Sparky

ответ

0

Ваш код:

submitHandler: function (form) { 
    if ($("#inscripcion").validate() == true) { 
     alert("Form not completed"); 
    } else { 
     form.submit(); 
    } 
}, 
  • $("#inscripcion").validate() совершенно бессмысленно в этом контексте. .validate() является только Инициализация метод плагина, нетестирование метод. Вызов .validate() более одного раза ничего не сделает.

  • Согласно документации, в submitHandler срабатывает только по нажатию кнопки отправки , когда форма действует. Это означает, что тестирование на достоверность в пределах submitHandler является излишним. Другими словами, этот тест внутри submitHandler не имеет смысла, поскольку всякий раз, когда вы оцениваете ваш оператор if valid, форма равна.

  • Если все, что вы хотите сделать, это form.submit(), тогда необходимо удалить весь обратный вызов submitHandler. Это поведение по умолчанию для плагина, которое вам не нужно перегружать. Обычно обратный вызов submitHandler используется, когда вы хотите отправить данные формы с помощью .ajax() и/или выполнить другие действия, когда форма действительна.


Я не уверен, что вы хотите достичь с ignore: "", однако, если вы пытаетесь enable validation of hidden fields, use ignore: []. В противном случае, если вы хотите, чтобы скрытые поля игнорировались для проверки, полностью удалите параметр ignore, потому что это уже поведение плагина по умолчанию.


Вы также неправильно размещены highlight и success внутри rules, а также отсутствует закрывающая фигурная скобка на rules:

$(document).ready(function() { 

    $('#inscripcion').validate({ 
     // your other options, 
     rules: { 
      nombrer: { 
       ... 
      }, 
      .... 
      highlight: function (element) { // <- incorrectly placed inside "rules" option 
       $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); 
      }, 
      success: function (element) { // <- incorrectly placed inside "rules" option 
       $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); 

      } 
     // <- missing a closing brace "}" here 
    }); 

}); // end document.ready 

Вот рабочая версия кода: http://jsfiddle.net/yyxLs/

+0

Спасибо, я только что проверил свой код и исправил эти отсутствующие фигурные скобки, и это сработало! –

Смежные вопросы