iter(g57): form 校验支持异步规则
This commit is contained in:
+6
-1
@@ -150,6 +150,7 @@ const modalOpen = signal(false);
|
||||
const modalPick = signal('a'); // 弹窗内下拉的取值,用于演示 Esc 逐层关闭
|
||||
|
||||
// —— 表单校验状态集中声明 ——
|
||||
const inviteCode = signal(''); // 异步校验演示:邀请码
|
||||
const username = signal('');
|
||||
const email = signal('');
|
||||
const formResult = signal('');
|
||||
@@ -398,13 +399,17 @@ const content = h(
|
||||
section(
|
||||
'sec-formlab',
|
||||
'表单校验',
|
||||
'form + formItem:必填 / 长度 / 正则校验,全部通过才触发提交;失焦校验、输入清错。',
|
||||
'form + formItem:必填 / 长度 / 正则同步校验,validator 返回 Promise 即异步规则(提交会等待);全部通过才触发提交。',
|
||||
form(
|
||||
{ submitText: '注册', onSubmit: () => formResult(`提交成功:${username()} / ${email()} / ${city()}`) },
|
||||
[
|
||||
formItem({ label: '用户名', required: true, value: username, rules: [{ min: 2, max: 12, message: '用户名需 2-12 个字符' }] }, textField({ placeholder: '2-12 个字符', value: username })),
|
||||
formItem({ label: '邮箱', required: true, value: email, rules: [{ pattern: /^[\w.-]+@[\w-]+\.[\w.]+$/, message: '邮箱格式不正确' }] }, textField({ placeholder: 'you@example.com', value: email })),
|
||||
formItem({ label: '城市', required: true, value: city }, select({ options: cities.map((c) => ({ value: c, label: c })), value: city, placeholder: '请选择城市…' })),
|
||||
formItem(
|
||||
{ label: '邀请码', required: true, value: inviteCode, rules: [{ validator: async (v) => { await new Promise((r) => setTimeout(r, 400)); return v === 'USED' ? '该邀请码已被使用' : true; }, message: '校验未通过' }] },
|
||||
textField({ placeholder: '异步规则:输入 USED 会校验失败', value: inviteCode }),
|
||||
),
|
||||
],
|
||||
),
|
||||
h('span', { class: 'out' }, () => formResult() || '等待提交…'),
|
||||
|
||||
Reference in New Issue
Block a user