【问题标题】:Disable Dojo validation on certain fields在某些字段上禁用 Dojo 验证
【发布时间】:2010-06-05 00:29:21
【问题描述】:

我想在我的用户表单中的某些字段上禁用客户端验证。目前,我有两组字段,根据前一个下拉列表的值显示。即,如果下拉列表设置为值“A”,则表单中将出现 1 个新字段。如果将下拉列表设置为“值”“ b” 3个新字段,则以表单显示(选择“ a”时,从新的form字段中相互排除)。目前,我的 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.">

这解决了我的隐藏字段问题。然而,这意味着当该字段对用户可见时不会执行任何验证(即 validate 属性仍设置为返回 true)。

我尝试在向用户显示字段时删除 validate 属性,如下所示:

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

这只是将属性设置为空。然而,这会在萤火虫中出现错误,提示未找到验证方法,因此我认为这意味着我没有正确删除此属性或删除此属性不是执行此操作的适当方法。

我还研究了覆盖验证器方法here,但这似乎也不是我想要的。我不想重写所有验证方法来代替 dojo。

我只想让 dojo 不验证该字段是否对用户不可见。感谢您的任何建议或帮助。

【问题讨论】:

    标签: javascript validation dojo


    【解决方案1】:

    我确定我做错了。 'validate' 和 'validator' 不是 dojo ValidationTextBox 的合适属性。他们都在 Firebug 中抛出“this.validate is not a function”形式的错误。所以起初看起来这对我有用,因为它不再尝试验证字段,但这只是因为抛出了错误。

    更好的解决方案是在加载时将“必需”属性设置为 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
    

    【讨论】:

      【解决方案2】:

      ValidationTextBox 期望验证器是一个函数,因此虽然您可以在标记中给它一个字符串值,但实际发生的是在创建实例时字符串被转换为函数。需要设置是正确的方法,但为了安全起见,我建议使用

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

      ..确保在小部件中正确更新状态。

      【讨论】:

      • 我最初尝试过这种方式,但它不再正确评估。它将所需的属性设置为“true”(字符串)而不是 true(bool)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2018-04-19
      • 1970-01-01
      • 2011-07-19
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多