2009-12-01 20 views
0

我是dojo的新手,可以真正使用以下2个字段验证示例的一些帮助。重写dijit验证器功能并使用regExp属性

在下面的例子中,指定validator属性的dijit.form.ValidationTextBox字段似乎覆盖了regExp的使用。 (即该字段不再遵守regExp规则)。如何让它同时做到这一点?

<input dojoType="dijit.form.ValidationTextBox"
type="password"
name="password2"
id="password2"
maxLength="50"
trim="true"
regExp="[\w]+"
required="true"
validator="return this.value == dijit.byId('password').value"
invalidMessage="Confirmation password must match password" />

我有其中一个领域依赖于另一个值的另一个类似的例子,但我没有语法正确。

<input dojoType="dijit.form.ValidationTextBox" type="text"
name="homePhone"
id="homePhone"
style="width:20%"
maxLength="10"
trim="true"
required="false"
regExp="[\d]{10}"
validator="return (dijit.byId('preferredContactMethod').value == "home") && (this.value != null)"
invalidMessage="Home phone required (ie. 9198887777)"
/>

回答

0

正确的; dijit.form.ValidationTextBox.prototype.validator()的默认实现是将this.value与this.regExp匹配,并检查其他各种约束,如this.required。看看源代码,看看它是如何完成的。如果你重写它,你自己提供一个实现。你的实现可能会选择委托给原型方法,并在逻辑上委托给你自己的测试结果。我想你也可以重写isValid。

+0

那么当field1依赖于field2时,通常如何进行验证测试?我应该拦截onSubmit事件并在那里提供额外的表单验证测试吗?或者,还有更好的方法? – Adam 2009-12-02 19:14:22

+1

是的,在表单层次上进行依赖验证可能更有意义,而不是将各个小部件连接在一起,这只是因为它会使用户体验更简单。否则,你可能会得到一些循环逻辑,这会使填写表格变得更加困难。您可以使用dijit.form.Form,除了检查各个小部件的有效状态外,还可以设置特定于窗体的验证规则。 – peller 2009-12-03 02:01:24