取决于字段验证

Depending fields validation

我有两个密码字段,除其他规则外,它们必须相等才能使表单有效。

<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 仅针对当前编辑的字段运行,而其他字段始终不相等。我尝试在 validatePasswordsEqual 中使用 store.notify(),但没有成功。

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

如果另一个字段中的值发生变化,您可以使用 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 的计算值。