我想在用户表单的某些字段上禁用客户端验证。目前,我有两组显示的字段,具体取决于上一个下拉列表的值。即,如果下拉列表设置为值“A”,则表单中将出现1个新字段。如果下拉列表设置为值“B”,则表单中将出现3个新字段(当选择“A”时,与新表单字段互斥)。目前,我的Dojo客户端验证失败,因为未向用户显示的字段(因此没有数据可以插入这些字段)无法验证。
目前我确定我可以将“validate”属性设置为返回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.">
这解决了隐藏字段的问题。但是,现在这意味着当该字段对用户可见时不执行验证(即,validate属性仍设置为返回true)。
我尝试在向用户显示字段时删除validate属性,如下所示:
dijit.byId('companycode').attr('validate','');
这只是将属性设置为空。然而,这会在firebug中发出错误,说明找不到验证方法,所以我认为这意味着我没有正确删除此属性或删除此属性不适合这样做。
我还看过覆盖验证器方法here,但这看起来不像我想要的那样。我不想重写所有验证方法来代替dojo。
我只是想让dojo不要验证该字段是否对用户不可见。感谢您的任何建议或帮助。
答案 0 :(得分:3)
我确定我做错了。 'validate'和'validator'不是dojo ValidationTextBox的适当属性。他们都在Firebug中抛出“this.validate不是函数”形式的错误。所以起初它看起来像是在为我工作,因为它不再试图验证字段,但这只是因为错误被抛出。
更好的解决方案是在加载时将“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
答案 1 :(得分:3)
ValidationTextBox期望验证器是一个函数,所以虽然你可以在你的标记中给它一个字符串值,但是实际发生的是在创建实例时字符串被转换为函数。设置要求是正确的方法,但为了安全起见我建议使用
dijit.byId("companycode").attr("required", true/false)
..确保在窗口小部件中正确更新状态。