Skip to content

表单组件

表单容器、各类输入控件与选择器。每个示例左侧为格式化 + 高亮的 TokUI DSL,右侧为实时渲染,点「编辑」可即时改动。

表单容器 form

包裹一组表单控件,提交时触发 sub: 处理器或 act 原生提交。

属性含义示例
id表单标识,供按钮 form:ID 显式绑定id:loginForm
act提交地址act:/api/save
mtd提交方法mtd:post
sub提交处理器名sub:onSubmit
clk通用事件处理器名clk:onFormClick

sub: 指向的处理器需通过 TokUI.registerHandler(name, fn) 预先注册;btn 上用 sub:xxx 触发表单提交。 表单外的按钮可用 form:ID 显式绑定目标表单(见下节表单动作),不再依赖 DOM 层级。

1[card tt:登录表单]
2 [form id:loginForm act:/api/login mtd:post sub:onLogin]
3 [input l:账号 n:username ph:"请输入账号" req]
4 [pwd l:密码 n:password ph:"请输入密码" req]
5 [btngroup]
6 [btn tx:登录 v:primary form:loginForm sub:onLogin]
7 [btn tx:重置 v:ghost form:loginForm reset]
8 [/btngroup]
9 [/form]
10[/card]
加载 TokUI…
TokUI DSL · 左代码右渲染

表单动作:提交 / 重置 / 数据收集

btn 内置三类动作,由 renderer 自动解析,无需 registerHandler(仅 sub 的业务处理仍需注册)。优先级 print > reset > submit > clk

DSL动作说明
[btn form:F sub:H]提交收集表单 F 的全部字段(含 slider/rate/picker 等自定义控件的 hidden 值),调用 handler H
[btn form:F reset]重置一键复原表单 F:原生输入走 form.reset(),自定义控件走内置 _tokuiReset;可选 reset:H 在复位后回调
[btn form:F clk:H]普通点击不收集数据,走 event-bus(form: 可省略,仅用于让 handler 拿到 data

form:ID 显式绑定(关键能力):按钮放在表单外部时,靠 form:ID 精确指明收集哪个表单,跨层级、多表单互不干扰。解析用 getElementById 且校验目标为 <form>,防 id 伪造。

[form id:formA sub:onA] ... [/form]
[form id:formB sub:onB] ... [/form]
[btn tx:"提交 A" form:formA sub:onA t:primary]   ← 只收集 formA
[btn tx:"提交 B" form:formB sub:onB t:primary]   ← 只收集 formB

重置覆盖范围input/pwd/select/textarea/checkbox 等原生控件 + slider/rate/numinput/switch/transfer/picker/cascader 等自定义控件均实现复位契约(data-tokui-resettable + _tokuiReset),renderer 遍历调用并向 form 广播 tokuireset 事件供外部监听。

1[h3 表单外按钮靠 form:ID 绑定]
2[row]
3 [col span:6]
4 [card tt:表单 A]
5 [form id:fa sub:onA]
6 [input l:姓名 n:name ph:张三]
7 [input l:邮箱 n:email ph:a@x.com]
8 [/form]
9 [btngroup]
10 [btn tx:"提交 A" form:fa sub:onA v:primary]
11 [btn tx:重置 form:fa reset v:ghost]
12 [/btngroup]
13 [/card]
14 [/col]
15 [col span:6]
16 [card tt:表单 B]
17 [form id:fb sub:onB]
18 [input l:公司 n:company ph:TokUI]
19 [numinput l:人数 n:count v:5 min:1 max:99]
20 [/form]
21 [btngroup]
22 [btn tx:"提交 B" form:fb sub:onB v:primary]
23 [btn tx:重置 form:fb reset v:ghost]
24 [/btngroup]
25 [/card]
26 [/col]
27[/row]
加载 TokUI…
TokUI DSL · 左代码右渲染

打印区 print-area

标记一块 1:1 打印区域,配合 [btn print:ID] 触发浏览器打印。打印时仅该区域可见、如实还原配色与布局;打印按钮自身不进预览。

属性含义示例
id打印区标识,供 print:ID 引用id:invoice
tt可选标题(打印文档标题)tt:收款单

触发打印btnprint 动作,内置、无需 handler):

DSL行为
[btn print:invoice]打印 #invoice 打印区
[btn print:self]打印按钮所在的最近 print-area / card
[btn print]裸写,等价 print:self

打印机制:renderer 给目标加 .tokui-print-target + body[data-tokui-printing]@media print 用 visibility 仅令该作用域可见(1:1)。响应式断点已限定 screen,打印不触发堆叠。@page 页边 + 打印区内边距构成文档边界;暗色主题下强制白底省墨。

1[print-area id:invoice tt:"收款单 #20260627"]
2[row]
3 [col span:6]
4 [stat tt:应付金额 v:"12,800.00" pre:"¥ " trend:up]
5 [/col]
6 [col span:6]
7 [stat tt:已付定金 v:"3,000.00" pre:"¥ " trend:down]
8 [/col]
9[/row]
10[table bordered]
11 [thead cols:"项目,数量,单价,小计"]
12 [tr 产品授权,5,¥1800,¥9000]
13 [tr 实施服务,1,¥2800,¥2800]
14[/table]
15[p v:bold 合计:¥12,800.00 账期:30 ]
16[/print-area]
17[btngroup]
18 [btn tx:"🖨 打印此单" print:invoice v:primary]
19 [btn tx:打印本卡 print:self v:ghost]
20[/btngroup]
加载 TokUI…
TokUI DSL · 左代码右渲染

输入框 input

单行文本输入,自闭合。l 标签、ph 占位、t 原生 type、val 初值。

属性含义示例
l标签l:姓名
ph占位提示ph:"请输入姓名"
t原生 input typet:email
n字段名n:username
val默认值val:Tom
id元素 IDid:username
w宽度w:240
hint提示文字hint:6~16 个字符
search搜索样式search
req / dis / ro必填 / 禁用 / 只读req

变体error / success(校验状态),sm / lg(尺寸),underline(下划线风格),pill(圆角)。

1[input l:姓名 ph:"请输入姓名" req]
2[input l:邮箱 t:email ph:name@example.com]
3[input l:带默认值 val:张三]
4[input l:搜索框 ph:"输入关键词搜索" search]
5[input l:禁用态 ph:不可编辑 dis]
6[input l:错误状态 v:error ph:校验失败]
加载 TokUI…
TokUI DSL · 左代码右渲染

密码框 pwd

带显隐切换的密码输入,自闭合。属性同 input,额外 toggle 控制是否允许切换明文。

属性含义示例
l标签l:密码
ph占位提示ph:"至少 6 位"
toggle显隐切换按钮toggle
req / dis必填 / 禁用req
v变体(同 inputv:error
1[pwd l:登录密码 ph:"请输入密码" req toggle]
2[pwd l:支付密码 ph:6 位数字 req]
3[pwd l:禁用态 ph:不可编辑 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

多行文本 textarea

多行文本输入容器。rows 初始行数、maxlen 最大字数、auto 高度自适应。

属性含义示例
l标签l:描述
ph占位提示ph:"请输入描述"
rows初始行数rows:4
maxrows最大行数(auto 模式)maxrows:8
maxlen最大字数maxlen:200
auto高度自适应auto
tx默认内容tx:"默认文本"
req / dis / ro必填 / 禁用 / 只读req
1[textarea l:默认值自闭合 tx:"热爱前端开发,擅长组件设计与性能优化。" maxlen:120]
2[textarea l:只读协议自闭合 ro tx:"本服务仅供学习,禁止商用。"]
3[textarea l:空容器嵌套 ph:"请简单介绍自己" rows:3]
4[/textarea]
5[textarea l:自适应高度 auto rows:2 maxrows:6 ph:"内容增多会自动撑开"]
6[/textarea]
7[textarea l:带内容嵌套 rows:4 ph:"请输入反馈"]
8 希望增加暗色主题与多语言支持。
9[/textarea]
加载 TokUI…
TokUI DSL · 左代码右渲染

下拉选择 select / opt

select 容器,子节点 opt 选项。multi 多选、req 必填。

属性含义适用
l标签select
ph占位提示select
multi多选select
n字段名select
req必填select
v变体select
tx选项文本opt
v选项值opt
chk默认选中opt

select 变体error / success

1[select l:单选部门 ph:"请选择"]
2 [opt 技术部]
3 [opt 市场部 chk]
4 [opt 运营部]
5[/select]
6[select l:多选技能 multi]
7 [opt React chk]
8 [opt Vue chk]
9 [opt Node]
10[/select]
11[select l:必选城市 req ph:"请选择城市"]
12 [opt 北京]
13 [opt 上海]
14[/select]
加载 TokUI…
TokUI DSL · 左代码右渲染

单选组 radio

radio 容器,子节点 opt 选项;同组互斥。

属性含义适用
l组标签radio
n字段名radio
v变体radio
tx选项文本opt
v选项值opt
chk默认选中opt
1[radio l:性别]
2 [opt ]
3 [opt chk]
4[/radio]
5[radio l:配送方式]
6 [opt 快递 chk]
7 [opt 自提]
8 [opt 同城配送]
9[/radio]
加载 TokUI…
TokUI DSL · 左代码右渲染

复选框 checkbox

自闭合。l 标签、chk 默认勾选。

属性含义示例
l标签l:同意条款
chk默认勾选chk
n字段名n:agree
v选项值v:1
id元素 IDid:agree
dis禁用dis
1[checkbox l:我已阅读并同意服务条款 chk]
2[checkbox l:订阅每周精选]
3[checkbox l:禁用且勾选 chk dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

开关 switch

自闭合。chk 开启、clk 切换回调。

属性含义示例
l标签l:邮件通知
chk默认开启chk
dis禁用dis
clk切换处理器名clk:onToggle
n字段名n:notify
vv:1
id元素 IDid:notify

变体sm / lg

1[switch l:接收邮件通知 chk]
2[switch l:免打扰模式]
3[switch l:夜间静音 clk:onNight]
4[switch l:小尺寸 chk v:sm]
5[switch l:大尺寸 chk v:lg]
加载 TokUI…
TokUI DSL · 左代码右渲染

滑块 slider

自闭合。min/max/step 区间与步进、v 当前值。

属性含义示例
l标签l:音量
min最小值min:0
max最大值max:100
step步进step:5
v当前值v:60
dis禁用dis
clk拖动回调clk:onSlide
n字段名n:volume
id元素 IDid:volume

变体sm / lg

1[slider l:音量 v:60 min:0 max:100]
2[slider l:亮度 step:5 v:75]
3[slider l:不透明度 v:30 clk:onOpacity]
4[slider l:禁用 v:50 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

评分 rate

自闭合。max 星级上限、v 当前分、clk 选择回调。

属性含义示例
l标签l:评分
v当前值v:4
max最大星级max:5
clk选择回调clk:onRate
dis只读/禁用dis
tx文案tx:很好
1[rate l:商品评分 v:4 max:5]
2[rate l:服务评分 v:0 max:5 clk:onRate]
3[rate l:只读评分 v:5 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

数字输入 numinput

自闭合。带加减按钮的数字输入,min/max/step 约束范围。

属性含义示例
l标签l:数量
v当前值v:1
min最小值min:1
max最大值max:99
step步进step:1
dis禁用dis
n字段名n:qty
id元素 IDid:qty
1[numinput l:购买数量 v:1 min:1 max:99 step:1]
2[numinput l:时长(小时) v:8 min:0 max:24 step:0.5]
3[numinput l:禁用 v:5 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

按钮组 btngroup

容器,包裹一组 btn。表单场景里常用于多按钮操作区(主要按钮用法见基础组件)。

属性含义示例
id组 IDid:actions
v变体v:vertical

变体vertical(垂直排列)、pill(圆角组)。

1[btngroup]
2 [btn tx:保存 v:primary sub:onSave]
3 [btn tx:取消 v:ghost]
4[/btngroup]
5[btngroup v:vertical]
6 [btn tx:上传 v:primary]
7 [btn tx:下载]
8 [btn tx:删除 v:danger]
9[/btngroup]
加载 TokUI…
TokUI DSL · 左代码右渲染

选择器 picker

容器,比 select 更丰富的选择面板(含搜索/多列)。multi 多选、dis 禁用。

属性含义示例
l标签l:城市
ph占位提示ph:"请选择"
multi多选multi
dis禁用dis
n字段名n:city
vv:bj
id元素 IDid:city

变体error / success

1[picker l:所在城市 ph:"请选择城市"]
2[/picker]
3[picker l:标签(多选) multi ph:"请选择标签"]
4[/picker]
5[picker l:禁用态 ph:不可选择 dis]
6[/picker]
加载 TokUI…
TokUI DSL · 左代码右渲染

级联选择 cascader

容器,逐级展开的多级选择(如省市区)。clk 选择回调。

属性含义示例
l标签l:地区
ph占位提示ph:"请选择"
dis禁用dis
clk选择回调clk:onPick
vv:"北京-朝阳"
n字段名n:region
id元素 IDid:region

变体error / success

1[cascader l:所在地区 ph:"请选择省/市/区"]
2[/cascader]
3[cascader l:商品分类 clk:onCategory]
4[/cascader]
加载 TokUI…
TokUI DSL · 左代码右渲染

文件上传 upload

自闭合。accept 限制类型、multi 多选、max 最大数量。

属性含义示例
l标签l:附件
ph占位提示ph:"点击或拖拽上传"
accept允许类型accept:"image/*"
multi多文件multi
max最大数量max:5
dis禁用dis
clk上传回调clk:onUpload
n字段名n:file
id元素 IDid:file

变体sm / lg

1[upload l:头像 accept:"image/*" ph:"点击上传头像"]
2[upload l:多文件上传 multi max:5 ph:"支持最多 5 个文件"]
3[upload l:禁用上传 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

日期选择 datepicker

自闭合。fmt 日期格式、v 默认值、clk 选择回调。

属性含义示例
l标签l:出生日期
ph占位提示ph:"请选择日期"
fmt日期格式fmt:yyyy-MM-dd
v默认值v:2026-06-20
clk选择回调clk:onDate
dis禁用dis
n字段名n:birthday
id元素 IDid:birthday
1[datepicker l:出生日期 ph:"请选择日期" fmt:yyyy-MM-dd]
2[datepicker l:默认值示例 v:2026-06-20]
3[datepicker l:禁用态 ph:不可选择 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

时间选择 timepicker

自闭合。fmt 时间格式、v 默认值。

属性含义示例
l标签l:开始时间
ph占位提示ph:"请选择时间"
fmt时间格式fmt:HH:mm
v默认值v:09:30
clk选择回调clk:onTime
dis禁用dis
n字段名n:time
id元素 IDid:time
1[timepicker l:开始时间 ph:"请选择时间" fmt:HH:mm]
2[timepicker l:默认值 v:09:30]
3[timepicker l:禁用态 ph:不可选择 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

日期时间 datetimepicker

自闭合。日期 + 时间合一选择,fmt 自定义格式。

属性含义示例
l标签l:预约时间
ph占位提示ph:"请选择日期时间"
fmt格式fmt:"yyyy-MM-dd HH:mm"
v默认值v:"2026-06-20 09:30"
clk选择回调clk:onDateTime
dis禁用dis
n字段名n:dt
id元素 IDid:dt
1[datetimepicker l:预约时间 ph:"请选择日期时间" fmt:"yyyy-MM-dd HH:mm"]
2[datetimepicker l:默认值 v:"2026-06-20 09:30"]
3[datetimepicker l:禁用态 ph:不可选择 dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

穿梭框 transfer

容器,左右两栏互斥的多选移动。tt/tt2 两侧标题、clk 移动回调。

属性含义示例
l标签l:分配角色
tt左侧标题tt:未选
tt2右侧标题tt2:已选
clk移动回调clk:onTransfer
h固定高度(内容滚动)h:240 / h:40vh
mh最大高度(覆盖默认 320px)mh:200
dis禁用dis
n字段名n:roles
id元素 IDid:roles

变体sm(max 260px)/ lg(max 400px)。默认最大高度 320px,列表超出时内部滚动(滚动条默认透明,hover 显灰色半透明)。

opt 子项填数据:带 chk 的初始在右侧(已分配),其余在左侧(待分配)。勾选后点 / 穿梭。

1[transfer l:角色分配 tt:待分配 tt2:已分配 clk:onTransfer]
2 [opt v:admin tx:系统管理员]
3 [opt v:editor tx:内容编辑 chk]
4 [opt v:viewer tx:只读访客]
5 [opt v:auditor tx:审计员 chk]
6 [opt v:dev tx:开发者]
7[/transfer]
加载 TokUI…
TokUI DSL · 左代码右渲染

h 固定高度、mh 最大高度示例:

1[transfer l:固定高度 h:160 tt: tt2:]
2 [opt v:1 tx:选项一]
3 [opt v:2 tx:选项二 chk]
4 [opt v:3 tx:选项三]
5 [opt v:4 tx:选项四]
6 [opt v:5 tx:选项五 chk]
7 [opt v:6 tx:选项六]
8[/transfer]
9[transfer l:最大高度 mh:140 tt:候选 tt2:已选]
10 [opt v:a tx:短列表A]
11 [opt v:b tx:短列表B chk]
12[/transfer]
加载 TokUI…
TokUI DSL · 左代码右渲染

标签输入 input-tag

回车添加标签、点击标签 × 移除。tags 初始标签、max 最大数量。带 tags 时可自闭合;无 tags[/input-tag] 闭合。

属性含义示例
l标签l:标签
ph占位提示ph:"输入后回车添加"
n字段名n:tags
max最大数量max:8
tags初始标签(逗号分隔)tags:"JS,Python"
dis禁用dis
1[input-tag l:技术栈 ph:"输入后回车添加" max:8 tags:"JavaScript,Python,Go"]
2[input-tag l:极简自闭合 tags:"React,Vue"]
3[input-tag l:空容器 ph:"无初始标签,手动添加"]
4[/input-tag]
5[input-tag l:禁用态 tags:"只读模式" dis]
加载 TokUI…
TokUI DSL · 左代码右渲染

完整 DSL 语法(属性简写、变体白名单、流式渲染约束等)见 DSL 语法