2015-06-07 217 views
0

我有幾個問題驗證我的數據充分驗證插件。
我有2個字段; fieldOne和fieldTwo。然後我有2個PHP文件,process.php和processfailed.php。JQuery驗證器插件驗證條件

現在我有好幾個條件。

如果fieldOne和fieldTwo都是空的,我想將錯誤顯示給用戶,但沒有所謂的PHP文件。

如果其中一個字段有有效數據,另一個有無效數據或爲空,我希望它調用process.php(我不想要驗證錯誤事件發生)。

只有在這兩個領域都無效數據做我想做processfailed.php被調用,從驗證錯誤事件中。

我到目前爲止的代碼是這樣(去掉了一些部分,以縮短)

var validator = $("#my_form").validate({ 
    rules: { 
     fieldOne: { 
      require_from_group: [1, '.datagroup'], 
      maxlength: 40 
     }, 
     fieldTwo: { 
      require_from_group: [1, '.datagroup'], 
      minlength: 8 
     } 
    }, 
    groups: { 
     datagroup: "fieldOne fieldTwo" 
    }, 
    submitHandler: function (form) { 
     $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: { 
       'fieldOne': $("#fieldOne").val(), 
       'fieldTwo': $("#fieldTwo").val() 
      } 
     }) 
     return false; 
    }, 
    invalidHandler: function (form, validator) { 
     /* Submit the form even if validation fails: */ 
     $.ajax({ 
      type: "POST", 
      url: "processfailed.php", 
      data: { 
       'fieldOne': $("#fieldOne").val(), 
       'fieldTwo': $("#fieldTwo").val() 
      } 
     }) 
     return false; 
    } 
}); 

在問候他們兩個是空的,此刻卻顯示錯誤給用戶,但它也出現要調用processfailed.php(我不想在這種情況下調用任何PHP文件)。

如果我給有效數據到一個領域,並保持其它空的,這似乎工作。

如果我將有效數據提供給一個字段並將無效數據提供給另一個字段,那麼在調用process.php時(只要有一個字段有效即可),這似乎會調用processfailed.php。

如果我將無效數據提供給兩個字段(它們都未通過驗證),processfailed.php似乎被調用,因爲它應該是。

那麼我怎樣才能處理這兩個領域是空的(不要調用任何PHP文件),如果一個字段是有效的,另一個無效的調用process.php而不是processfailed.php。

任何意見讚賞。

回答

1

對於兩個字段均爲空的第一個條件,只需在invalidHandler方法中放置if語句即可。

爲了在另一個有效時不將驗證應用於其中一個字段,可以使用規則的depends屬性。

$("#my_form").validate({ 
    rules: { 
     fieldOne: { 
      require_from_group: [1, '.datagroup'], 
      maxlength: { 
       param: 2, 
       depends: function(element) { 
        var valTwo = $('#fieldTwo').val(); 
        return !valTwo || (valTwo.length < 8); 
       } 
      } 
     }, 
     fieldTwo: { 
      require_from_group: [1, '.datagroup'], 
      minlength: { 
       param: 8, 
       depends: function(element) { 
        var valOne = $('#fieldOne').val(); 
        return !valOne || (valOne.length > 2); 
       }     
      } 
     } 
    }, 
    submitHandler: function (form) { 
     alert("process"); 
     return false; 
    }, 
    invalidHandler: function (event, validator) { 
     if ($('#fieldOne').val() || $('#fieldTwo').val()) { 
      alert('processfailed'); 
     } else { 
      alert('empty'); 
     } 
     return false; 
    } 
}); 

jsfiddle

我刪除了groups屬性,因爲它會導致得到旁邊顯示的第一場,這似乎不正確的,當消息是因爲第二場違反minlength規則的所有消息。

注意:invalidHandler函數的第一個參數是事件對象,而不是表單元素,但您可以使用event.target獲取表單元素。