2015-11-09 63 views
1

我在窗體中使用jQuery驗證。我沒有遇到很多問題,但是我在用戶表單中遇到了問題,其中jquery數字驗證未觸發。我在IE,Firefox和Chrome中測試過它,並且它們在其中任何一個都不起作用。奇怪的部分是,到目前爲止,它似乎是特定於這一個用戶的形式,因爲當我去其他用戶形式警報火焰罰款,因爲它在我所有的瀏覽器測試。我想知道是否有其他人在使用jQuery驗證之前遇到過這個問題。下面是我使用的一些jQuery驗證代碼的示例。jquery數字驗證不一致工作

var validator = $("#educationForm").validate({ 
      debug: true, 
      errorElement: "span", 
      errorClass: "help-block errortext", 
      errorPlacement: function (error, element) { 
       element.before(error); 
      }, 
      success: function (label) { 
       label.remove(); 
      }, 
      rules: { 
       school1GPA: { 
        number: true 
       }, 
       school2GPA: { 
        number: true 
       }, 
       school1Units: { 
        number: true 
       }, 
       school2Units: { 
        number: true 
       }, 
      }, 
      onsubmit: false 
     }); 

    $('.form-actions').on('click', '#btnSubmit', function (evt) { 
      evt.preventDefault(); 
      if ($("#educationForm").valid()) { 

       $.ajax({ 
        type: "POST",............ 
     } else { 
      validator.focusInvalid(); 
     } 
    }); 
+0

你也可以提供'這種特殊形式的html'? – trincot

回答

1

的問題是,你是觸發evt.preventDefault()你甚至可能會引發jquery驗證之前。這基本上是在遵循evt.preventDefault()之後終止任何驗證聲明。您只需致電$("#educationForm").valid()jquery.validate(),然後致電evt.preventDefault()

$('.form-actions').on('click', '#btnSubmit', function (evt) { 

      if ($("#educationForm").valid()) { 
       evt.preventDefault(); // prevents the form submission to allow ajax 
       $.ajax({ 
        type: "POST",............ 
     } else { 
      validator.focusInvalid(); 
     } 
}); 
+0

點擊處理程序是不需要的,並且ajax屬於插件的'submitHandler'選項。 – Sparky

+0

是的,你也可以這樣做。調用特定的驗證相關處理程序。 – DinoMyte

0
  • 你不應該需要你click處理的。 As per documentation,你的ajax屬於submitHandler回調函數的內部。

  • 您也不應將onsubmit設置爲false,除非您希望單擊提交按鈕時驗證被阻止。

  • debug設置爲true將阻止提交表單。

更多的東西像這樣...

var validator = $("#educationForm").validate({ 
     // debug: true, // <- this is blocking the submit entirely 
     submitHandler: function(form) { 
      // your ajax here 
      $.ajax(...); 
      return false; 
     }, 
     errorElement: "span", 
     errorClass: "help-block errortext", 
     errorPlacement: function (error, element) { 
      element.before(error); 
     }, 
     success: function (label) { 
      label.remove(); 
     }, 
     rules: { 
      school1GPA: { 
       number: true 
      }, 
      school2GPA: { 
       number: true 
      }, 
      school1Units: { 
       number: true 
      }, 
      school2Units: { 
       number: true 
      }, 
     }, 
     // onsubmit: false // <- this is preventing validation on the submit. 
    }); 

DEMO:http://jsfiddle.net/2vv8vL79/