Skip to content

InputNumber 数字输入框 ​

数字输入组件:内层为文本输入 + 数字键盘(inputmode="decimal"),带步进按钮、范围约束与格式化显示,role="spinbutton" 提供完整的数值 aria 状态。

基础用法 ​

基础用法

placeholder 透传内层输入框作为占位提示;未设置 label 时占位文本同时参与可访问名称回退链(见下方 label 一节)。

范围与步长 ​

min / max / step

到达边界时对应步进按钮自动禁用。键入越界值不会打断逐位输入(先输 1 再补 00 凑 100 不受影响),失焦时矫正到范围内并临时以红边提示越界(见「校验态与越界提示」)。

精度 ​

precision

precision 同时控制显示与提交值的小数位数:1.5 显示为 1.50,步进与失焦矫正后保持两位小数。

尺寸 ​

size(sm / md / lg)

size 三档对齐全局控件 token(--oas-control-height-* / --oas-font-size-*),默认 md。

步进按钮形态 ​

controls 显隐与 controls-position 位置

  • controls 默认显示步进按钮;controls="false" 隐藏(键盘 ↑↓ 步进仍然可用)
  • controls-position="right"(默认):输入框右侧上下箭头
  • controls-position="both":两侧 - / + 大按钮,触屏计数器场景更友好

按住步进按钮 800ms 后进入连击:每 100ms 自动步进一次,松手即停(内置行为,无需配置)。

前后缀 ​

prefix / suffix

prefix-text / suffix-text 为输入框内嵌装饰文案(不参与数值解析);也支持同名插槽分发任意内容:<span slot="prefix">…</span>。prefix / suffix 为兼容别名(规范名 prefix-text / suffix-text),attribute 与 property(React / Vue 绑定)两条通道均可用。

clearable + 步进钮 + 后缀叠加

clearable / 步进钮 / 前后缀可任意叠加:右侧元素按「后缀 → 清除钮 → 步进钮区」自左向右排布,全部内嵌在输入框内,输入文字按叠加总宽自动让位(controls-position="both" 时清除钮/后缀在框内让开右侧 + 钮)。

千分位与格式化(声明式) ​

grouping 千分位

format 货币 / 百分比 / 单位

  • grouping:千分位分组显示(解析时自动剥离分组符)
  • format:Intl 风格声明式格式——percent(比率语义:0.15 显示 15%)、currency:USD、unit:GB 等,跟随宿主 locale
  • 格式化后的可读文本会同步到 aria-valuetext,读屏朗读格式化结果

格式化(函数式) ​

formatter / parser 函数 property

attribute 传不了函数,复杂格式通过 JS property 成对设置(优先于声明式格式属性):

js
el.formatter = (v) => `≈ ${v.toLocaleString()} 件`
el.parser = (s) => Number(s.replace(/[^0-9.\-]/g, ''))

parser 返回非有限数按非法输入处理(失焦还原上一个有效值)。上方示例的 formatter / parser 在本页底部统一的脚本块中挂接。

空值与可清空 ​

clearable 与空值语义

「未填」≠「0」:value 为空串(或未设置)时是空值态,oas-change 派发 detail.value === null,表单序列化为空串。输入数值后出现清除按钮,一键回到空值态(派发 oas-clear + oas-change null)。空值时步进从 min(设了 min 时)或 0 起步。

校验态与越界提示 ​

status 与越界临时红显

status 三态(error / warning / success)控制边框语义色,用于表单校验联动。第四个示例:键入 200 观察越界临时红边(不打断输入),失焦自动矫正回 100。

严格步进 ​

step-strictly

step-strictly 开启后,提交时值吸附到最近的 step 倍数(整箱 / 整打采购场景):键入 7 失焦后变为 12,键入 5 变为 0。

只读 ​

readonly

readonly 与 disabled 语义分立:可聚焦、可复制、值可提交,但步进按钮禁用、键盘与滚轮不改变值(aria-readonly 同步)。

滚轮步进 ​

wheel(默认关闭)

设置 wheel 后聚焦输入框时滚轮步进(上滚增、下滚减),并阻止页面滚动;默认关闭以防误触。

指针微调(scrub) ​

按住数字区横向拖动(scrub)+ Shift/Alt 精调

数字区支持指针微调(scrub):按住输入框横向拖动,每 4px 计一步(步长 = step),密集调参时不必精确点按或键入。修饰键与 knob 同一口径:Shift 精调(×0.2)、Alt 超精调(×0.04),不引入加速档;拖回按下位置即恢复原值(误拖无损撤销);位移不足一步视为普通点击(聚焦与文本选择不受影响)。松手按提交制写回(oas-change,值未变化不派发),拖动过程派发 oas-input。

触屏(coarse pointer)不启用 scrub(点按即聚焦弹键盘,文本键入优先);CSS 已放行纵向触摸滚动(touch-action: pan-y),横向位移才进入 scrub。需要完全关闭时设 scrub="false"。

禁用 ​

禁用

无障碍名称(label) ​

label(可访问名称)

label 作为输入框的可访问名称(aria-label):设置后读屏朗读该名称;未设置时依次回退 placeholder → 内置文案「数字输入框」。步进按钮「增加 / 减少」的可访问名称同样走内置文案。

小数分隔符(decimal-separator) ​

decimal-separator(缺省 locale 感知)

decimal-separator 指定小数点字符(默认取运行环境 locale 的小数分隔符,与 Intl 格式化同源)。左侧为 locale 默认,右侧显式设为逗号:显示、键入解析与提交值三者一致——右侧键入 2,5 提交 2.5,失焦后回显 2,5。监听 oas-change 可读回提交的数字值。

形态(variant) ​

variant 三态

variant 支持 outlined(默认描边)/ filled(填充底色、聚焦才出边框)/ borderless(无框无底色),语义与 oas-input 变体一致;controls-position="both" 时两侧 −/+ 按钮同档跟随形态。

对齐(align) ​

align 数字对齐

align 控制数字文本对齐(left / center / right)。为 RTL 安全,映射为逻辑 text-align: start/end:left / right 在 dir="rtl" 下自动镜像为行首/行尾;未设置时使用浏览器默认(start,LTR 下即左对齐)。

自动聚焦(autofocus) ​

autofocus(挂载后聚焦内层输入)

新增一个 autofocus 输入框

autofocus 在挂载后把焦点转发给 shadow 内层输入(原生 autofocus 不穿透 shadow DOM),页面/表单打开即可直接键入。为避免文档页加载即抢焦点,这里由按钮动态创建带 autofocus 的组件演示。

事件 ​

change / clear / focus / blur / input

  • oas-change:失焦 / Enter / 步进 / 滚轮 / 清空时触发,detail: { value },value 为数字或 null(空值)
  • oas-clear:清除按钮点击
  • oas-focus / oas-blur:内层输入聚焦/失焦时派发,detail: { value } 为当前已提交值(数字或 null;blur 在提交后派发,携带提交后的新值)
  • oas-input:键入过程实时派发,detail: { value } 为当前显示文本(string,未提交语义,格式化场景含装饰字符)

required 必填 ​

required 必填(原生校验链)

required 驱动原生校验链(form-associated):未填时 checkValidity() 为 false(valueMissing),原生表单提交被阻止;填写后自动恢复 :valid。

程序性读/写当前值走公开 value property:el.value 读取——FormData 口径(内部 input 在场读实时解析值,空值/非法键入为空串);el.value = x 写入——写受控 value 属性并强制回显(无视聚焦保护),不派发事件。

API ​

oas-input-number ​

属性 ​

属性说明类型默认值
align数字文本对齐 left/center/right(逻辑映射,RTL 镜像)string—
autofocus挂载后聚焦内层输入(原生 autofocus 不穿透 shadow)boolean—
clearable有值时显示清除按钮(一键回空值态)boolean—
controls步进按钮显隐(缺省显示;controls="false" 隐藏,键盘 ↑↓ 仍可步进)——
controls-position按钮位置:right(默认,右侧上下箭头)/ both(两侧 −/+,触屏计数器形态)——
decimal-separator小数点字符(显示与键入解析用;缺省 locale 感知,提交值仍规范数字串)string—
disabled禁用boolean—
formatIntl 风格声明式格式:percent(0.15→15%)/ currency:USD / unit:GB,跟随宿主 localestring—
grouping千分位分组显示(解析时自动剥离分组符)boolean—
label可访问名称(aria-label 来源,未设时回退内置文案「数字输入框」)string—
max范围,越界自动钳制string—
min范围,越界自动钳制string—
placeholder占位文本(参与 aria-label 回退链)string—
precision小数位数string—
prefix-text内嵌前缀文案(slot="prefix" 可分发任意内容,不参与数值解析)string—
readonly只读:可聚焦可复制可提交,按钮禁用 + aria-readonly,键盘/滚轮不改值boolean—
required必填标记(驱动原生校验链 valueMissing;不透传内层 input)boolean—
scrub数字区指针微调(scrub,默认开启):按住输入框横向拖动,每 4px 计一步(步长 = step);Shift 精调(×0.2)、Alt 超精调(×0.04);拖回按下位置恢复原值;位移不足一步视为普通点击(保留键入/文本选择);松手按提交制写回(oas-change);scrub="false" 关闭;触屏(coarse pointer)不启用stringtrue
size尺寸档位 sm / md(默认)/ lg:控高与字号联动——
status校验态:error / warning / success 边框语义色——
step步长string1
step-strictly严格步进:提交值吸附最近 step 倍数boolean—
suffix-text内嵌后缀文案(slot="suffix" 同上)string—
value当前值(受控)string—
variant形态 outlined/filled/borderless(对齐 input)string—
wheel聚焦时滚轮步进(上增下减;默认关防误触)boolean—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
value当前值:实时解析后的数字串(空值 / 非法键入为空串)string—

事件 ​

事件说明
oas-blur失焦时派发(提交后),detail: { value } 携带提交后的新值
oas-change步进或失焦变化,detail: { value }(数字;空值态为 null)
oas-clear点击清除按钮时派发(值回空值态),detail: {}
oas-focus聚焦时派发,detail: { value }(当前已提交值)
oas-input键入实时派发,detail: { value } 为当前显示文本(未提交)

插槽 ​

名称说明
prefix前缀内容插槽(不参与数值解析)
suffix后缀内容插槽(不参与数值解析)

CSS 变量 ​

CSS 变量默认值
--oas-button-group-radiusvar(--oas-radius-md)
--oas-input-number-controls-pad28px
--oas-input-number-fontvar(--oas-font-size-md)
--oas-input-number-heightvar(--oas-control-height-md)

基于 MIT OR Apache-2.0 双许可发布