依赖字段验证

时间:2020-09-07 08:22:26

标签: cxjs

我有两个密码字段,在其他规则中,该字段必须相等才能使表格有效。

<form onSubmit="resetPassword">
    <ValidationGroup valid-bind="$page.formvalid"  >
        <FlexCol>
            <TextField
                value-bind="$page.password1"
                label="Password 1"
                inputType="password"
                required
                validationRegExp={/(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/}
                minLength="6"
                onValidate="validatePasswordsEqual"
            />
            <TextField
                value-bind="$page.password2"
                label="Password 2"
                inputType="password"
                required
                validationRegExp={/(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/}
                minLength="6"
                onValidate="validatePasswordsEqual"
            />
            <Button
                submit
                disabled-expr="!{$page.formvalid}"
                text="Reset Password"
            />
        </FlexCol>
    </ValidationGroup>
</form>

但是,validatePasswordsEqual仅针对当前编辑的字段运行,而其他字段始终不相等。我尝试从store.notify()内部使用validatePasswordsEqual,但没有成功。

如何同时在两个字段上进行验证?

1 个答案:

答案 0 :(得分:0)

如果另一个字段中的值发生更改,则可以使用validationParams字段来触发验证。

<TextField
   value-bind="$page.password1"
   label="Password 1"
   inputType="password"
   validationParams={{ password2: { bind: '$page.password2 }}
   required
   validationRegExp={/(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/}
   minLength="6"
   onValidate="validatePasswordsEqual"
/>

提供给onValidate回调的第三个参数将是validationParams的计算值。