2010-08-20 53 views
1

網站:http://tinyurl.com/358lh6ajQuery驗證插件:如何獲得它重新驗證

我要重新驗證宮殿地址(他們是想域,形式爲:名稱)每當DomainSelect(域無論如何都會改變。

我想只是簡單:

<select id=DomainSelect name=DomainSelect onChange="$('#Register').validate().element('#Name');"> 

它沒有工作,雖然。我不確定.element是否實際重新驗證了表單元素,或者只是返回true或false。

另外,應該注意的是,當Package改變時,DomainSelect被完全擦除並且輸入新的值(這可能弄亂了某些東西)。如果可以提出另一種方式,比如某種隱藏方式。

編輯:

查看源的插件,我看遙控功能:

remote: function(value, element, param) { 
      if (this.optional(element)) 
       return "dependency-mismatch"; 

      var previous = this.previousValue(element); 
      if (!this.settings.messages[element.name]) 
       this.settings.messages[element.name] = {}; 
      previous.originalMessage = this.settings.messages[element.name].remote; 
      this.settings.messages[element.name].remote = previous.message; 

      param = typeof param == "string" && {url:param} || param; 

      if (previous.old !== value) { 

這裏最重要的部分是previous.old ==價值!由於我真的只驗證#Name,並且在HTTP POST中沿着#DomainSelect拋出...... #Name值永遠不會改變,所以函數會觸發。

我可以解決這個問題的一種方法是創建一個隱藏的輸入,將#Name & #DomainSelect連接在一起,然後驗證該值,以這種方式更改值。除非有人提出一個更好的主意。另一種選擇會做我自己的方法,但是這我寫了不必要的代碼爲Http請求等。

編輯:我決定嘗試做一個隱藏的輸入,採取兩個輸入的值,然後驗證它。該代碼是凌亂:

<input name=Name id=Name size=17 onKeyUp="$('#NameDomainSelect').val( $('#Name').val() + $('#DomainSelect').val() );$('#NameDomainSelect').valid();"> 
<select id=DomainSelect name=DomainSelect onChange="$('#NameDomainSelect').val($('#Name').val() + $('#DomainSelect').val() );$('#NameDomainSelect').valid();"> 

名稱是子域名和DomainSelect是域本身。然後NameDomainSelect是名稱和DomainSelect連接。然後我必須爲NameDomainSelect定義一個規則並修改我的PHP。然而,現在它顯示2複選標記,因爲它驗證名稱(對於需要)和NameDomainSelect ...嘆息...

所以我決定作爲一種解決方法,直到有人指示我否則修改驗證的遠程函數接受一個數組作爲參數。 0元素是一個字符串,指向要包含的表單值,在這種情況下是DomainSelect ...,1元素是ajax請求的正常對象。

if (!param[0] == "") value = value + $("#" + param[0]).val(); 
... 
param = typeof param[1] == "string" && {url:param[1]} || param[1]; 

對於遠程調用,我不需要2個值來依賴,我只是簡單地將0元素設置爲「」。

回答

3

嘗試:

<select id="DomainSelect" name="DomainSelect" onChange="$('#Name').valid();"> 

如果不工作,我會建議增加一個自定義的方法,你之前說的...