You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Tabulator表格单元格仅允许输入数字,禁止非数值内容

解决Tabulator单元格仅允许输入数字的配置方案

要实现Tabulator单元格仅允许输入数字(禁止非数值及特殊字符),可以通过两种核心方式实现,结合你的现有代码,具体修改如下:

方法1:使用Tabulator内置的number编辑器(推荐)

Tabulator提供了专门的number编辑器,默认只允许输入数字、小数点和正负号(可配置禁用),比原生input编辑器更贴合需求。

修改你的列配置:

将Min、Nom、Max列的editor从"input"改为"number",并通过editorParams配置小数位数、是否允许正负号等规则:

this.beltTabulatorHeaders = [
    {
        title: "Type", field: "name", headerHozAlign: "left", width: "55%", headerSort: false, hozAlign: "left", editable: false
    },
    {
        title: "Value", headerHozAlign: "center", width: "45%",
        columns: [
            {
                title: "Min", field:"minValue",cellEdited: validateBelt, validator:"numeric", // 使用内置numeric验证器
                editable:editCheck,editor: "number", // 替换为number编辑器
                headerSort: false, width: "15%", hozAlign: "right", formatter: decimalFormatter,
                headerHozAlign: "right",
                editorParams: {
                    formatter: decimalFormatter,
                    step: 0.01, // 步长,控制小数精度
                    min: 0, // 可选:限制最小值
                    max: 9999, // 可选:限制最大值
                    allowEmpty: false, // 是否允许空值
                    allowNegative: false, // 是否允许负数,根据需求设置
                },
            },
            {
                title: "Nom", field: "nomValue",cellEdited: validateBelt, validator:"numeric",
                editor: "number", // 替换为number编辑器
                headerSort: false, width: "15%", hozAlign: "right", formatter: decimalFormatter, headerHozAlign: "right",
                editorParams: {
                    formatter: decimalFormatter,
                    step: 0.01,
                    allowNegative: false,
                }
            },
            {
                title: "Max", field:"maxValue",cellEdited: validateBelt, editable:editCheck,editor: "number", // 替换为number编辑器
                headerSort: false, width: "15%", hozAlign: "right", formatter: decimalFormatter, headerHozAlign: "right",
                editorParams: {
                    formatter: decimalFormatter,
                    step: 0.01,
                    allowNegative: false,
                }
            },
        ],
    },
];

方法2:自定义input编辑器的输入过滤(适合需更精细控制的场景)

如果坚持使用input编辑器,可以通过editorParams添加onKeyDown事件,实时拦截非数字按键:

先定义按键过滤函数:

const filterNonNumericKeys = (e) => {
    // 允许的按键:数字(0-9)、退格(8)、删除(46)、小数点(190)、方向键(37-40)
    const allowedKeys = [8, 46, 37, 38, 39, 40, 190];
    const isNumeric = !isNaN(parseInt(e.key));
    
    if (!isNumeric && !allowedKeys.includes(e.keyCode)) {
        e.preventDefault(); // 拦截非法按键
    }
    
    // 额外限制:只允许一个小数点
    if (e.key === '.' && e.target.value.includes('.')) {
        e.preventDefault();
    }
};

修改列配置的editorParams:

// 以Min列为例,其他列同理
{
    title: "Min", field:"minValue",cellEdited: validateBelt, validator:numericValidator,
    editable:editCheck,editor: "input",
    headerSort: false, width: "15%", hozAlign: "right", formatter: decimalFormatter,
    headerHozAlign: "right",
    editorParams: {
        formatter: decimalFormatter,
        elementAttributes: {
            type: "text"
        },
        onKeyDown: filterNonNumericKeys // 绑定过滤函数
    },
}

补充:完善验证器

确保你的numericValidator(或使用Tabulator内置的"numeric"验证器)能在编辑完成后再次校验,防止通过粘贴等方式输入非法值:

// 自定义数值验证器示例
const numericValidator = (cell) => {
    const value = cell.getValue();
    if (value === null || value === "") return false;
    return !isNaN(parseFloat(value)) && isFinite(value);
};

内容的提问来源于stack exchange,提问作者Sharana Avali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:47:13