2010-06-05 50 views
1

我想禁用我用戶表單中某些字段的客戶端驗證。目前,我有兩組顯示取決於上一個下拉列表的值的字段。即如果下拉列表被設置爲值「A」,則1個新字段出現在表格中。如果下拉列表設置爲值「B」,則3個新字段出現在表單中(當選擇「A」時,新表單字段與新表單字段互斥)。目前,我的Dojo客戶端驗證失敗,因爲未向用戶顯示的字段(因此無法將數據插入到這些字段中)無法驗證。在某些字段上禁用Dojo驗證

目前,我確定我可以設置「驗證」屬性,像這樣返回true:

<input type="text" id="companycity" name="companycity" class="textinput" value="<?php echo set_value('companycity'); ?>" style="<?php if(isset($errorData['companycity'])){echo $errorData['companycity'];} ?>" 
      dojotype="dijit.form.ValidationTextBox" 
      required="true" trim="true" validate='return true'" 
      regexp="([a-zA-Z]{1,25})" 
      invalidMessage="Invalid value. Must be between 1 and 25 alphabetic characters long."> 

這解決了我的問題的隱藏字段。但是,這意味着當該字段對用戶可見時(即,驗證屬性仍設置爲返回true),不執行驗證。

我曾試圖消除驗證屬性時字段顯示給用戶,像這樣:

dijit.byId('companycode').attr('validate',''); 

這只是設置屬性不了了之。然而,這在螢火蟲中說錯誤的方法沒有找到驗證方法,所以我認爲我沒有正確地移除這個屬性,或者移除這個屬性不是適當的方法來做到這一點。

我也看過重寫驗證方法here但這似乎並不是我想要的。我不想重寫所有的驗證方法來代替dojo的。

我只想讓dojo不要驗證該字段對用戶不可見。感謝您的任何建議或幫助。

回答

3

我確定我做錯了。 'validate'和'validator'不是dojo ValidationTextBox的合適屬性。他們都以「this.validate不是函數」的形式在Firebug中拋出錯誤。所以起初它看起來像是在爲我工作,因爲它不再試圖驗證字段,但這只是因爲錯誤被拋出。

更好的解決方案是在加載時將「required」屬性設置爲false。

<input type="text" id="companycode" name="companycode" class="textinput" value="<?php echo set_value('companycode'); ?>" style="<?php if(isset($errorData['companycode'])){echo $errorData['companycode'];} ?>" 
      dojotype="dijit.form.ValidationTextBox" 
      required="false" trim="true" 
      regexp="(^[A-Za-z]{2}-[0-9]{5}$)" 
      invalidMessage="Invalid value. Must be a valid company code of the form EX-00000"> 

然後,當一個字段變爲可見時,將required屬性設置爲true。

dijit.byId('companycode').required = true 
3

個ValidationTextBox預期驗證是一個函數,因此,儘管你可以把它在你的標記一個字符串值,所發生的情況是,字符串被轉換爲函數實例被創建的時候。設置必需是正確的路要走,但爲了安全起見,我建議使用

dijit.byId("companycode").attr("required", true/false) 

..to確保狀態在微件正確更新。

+0

我最初嘗試過這種方式,但它不再正確評估。它將required屬性設置爲「true」(字符串)而不是true(bool) – 2010-06-15 16:49:56