2016-04-26 53 views
0

我正在使用jquery驗證插件來驗證我的表單。jquery驗證 - 調用一些元素的.valid()方法沒有清除錯誤

https://jqueryvalidation.org/

當我打電話在另一元件驗證一些元素則電流元件錯誤消息是沒有得到除去.valid()方法。

說我有元素E1和E2。元素E1的驗證方法是Method1。 在Method1中,如果我調用E2.valid()以編程觸發驗證。 即使認爲元素有效,E1中的錯誤消息也沒有被刪除。

請找到代碼。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Validate IP Address using jQuery</title> 
    <script type="text/javascript" 
    src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"> 
    </script> 
    <script type="text/javascript" src= 
"http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"> 
    </script> 
    <script type="text/javascript"> 
     $(document).ready((function() { 
      $.validator.addMethod('IP1Checker', function(value) { 
       $("#ip2").valid(); 
       return isValidIPAddress(value); 
      }, 'Invalid IP address'); 

      $.validator.addMethod('IP2Checker', function(value) { 
      return isValidIPAddress(value); 
      }, 'Invalid IP address'); 

      $('#form1').validate({ 
       rules: { 
        ip: { 
         required: true, 
         IP1Checker: true 
        }, 
        ip2: { 
         required: true, 
         IP2Checker: true 
        } 
       } 
      }); 

      function isValidIPAddress(value) { 
      var isValid = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(value); 
      if (isValid && (value === "0.0.0.0" || value === "255.255.255.255")) { 
       isValid = false; 
      } 
      return isValid; 
     } 

     })); 
    </script> 
</head> 
<body> 
<form id="form1"> 
    <input id="ip" name="ip" type="text" /> 
    <input id="ip2" name="ip2" type="text" /> 
    <input id="Submit2" type="submit" value="submit" /> 
</form> 
</body> 
</html> 

謝謝。

+0

可以請你提供一個小提琴。 – Bhumika107

+0

請輸入您的代碼 – hmd

+0

嗨Developer107和Hmd,我已經添加了代碼。如果在第一個方框中提供了錯誤的IP,例如「1.1.1.1S」,並移動到下一個方框,它將顯示無效的IP地址,如果刪除了S,並且仍然存在錯誤消息,則會顯示錯誤消息。 – JavaUser

回答

2

首先,jQuery v1.4.2和jQuery Validate v1.7老得可笑(大約在2010年),應該更新。


$.validator.addMethod('IP1Checker', function(value) { 
    $("#ip2").valid(); // <- you shouldn't do this 
    return isValidIPAddress(value); 
}, 'Invalid IP address'); 

你不應該從.addMethod()方法中調用.valid(),因爲它可能會拋開一切成一個循環。 .addMethod()方法僅用於創建新的驗證規則,而不是用於其他功能,例如以編程方式觸發驗證測試。 (驗證測試在特定字段或表單上運行全部規則。驗證規則根據一個特定規則評估一個特定字段。)

您甚至不需要用於檢查IP地址的自定義方法。只需使用已插入到插件的the additional-methods.js file中的ipv4規則即可。

$('#form1').validate({ 
    rules: { 
     ip: { 
      required: true, 
      ipv4: true 
     }, 
     ip2: { 
      required: true, 
      ipv4: true 
     } 
    } 
}); 

DEMOhttps://jsfiddle.net/p5gn6zhe/


至於呼籲.valid()現場#2#字段1自定義IP規則內;它沒有清楚地解釋爲什麼你想要這樣做。你想要場#2驗證取決於場#1是否被填寫?如果是這樣,那麼這完全是另一回事。

否則,您將使用外部處理程序觸發.valid()

$('#ip').on('keyup blur', function() { 
    $("#ip2").valid(); 
}); 

DEMO 2https://jsfiddle.net/p5gn6zhe/2/

+0

謝謝Sparky。我通過使用回調解決了這個問題。我通過setTimeout($(「#ip2」)。valid(),0)來調用這個驗證。 – JavaUser

相關問題