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

如何用纯JavaScript替代jQuery实现多输入框keyup事件绑定?

纯JavaScript替代jQuery绑定keyup事件实现逗号格式化的正确方案

需求回顾

为所有带有data-pattern='comma'属性的<input>元素绑定keyup事件,触发自定义函数inputComma,在用户输入时将输入框值格式化为逗号分隔的格式。

你的写法问题排查

你尝试的两种写法语法本身没有错误,大概率是inputComma函数内部的逻辑没有适配纯JS环境导致的。比如原jQuery版本的inputComma可能依赖$(this)获取当前元素,而你转成纯JS时没有对应调整函数内部的元素引用方式。

正确实现方案

方案1:利用事件处理函数的this指向(最简洁)

普通函数作为事件处理函数时,this会自动指向触发事件的<input>元素,和jQuery中$(this)指向的元素一致,直接绑定函数即可:

// 绑定事件
document.querySelectorAll("input[data-pattern='comma']").forEach(elem => {
    elem.addEventListener('keyup', inputComma);
});

// 适配纯JS的inputComma函数
function inputComma() {
    // 这里的this就是当前触发keyup的input元素
    const rawValue = this.value.replace(/,/g, ''); // 先移除已有的逗号
    // 格式化数字为逗号分隔格式
    const formattedValue = rawValue.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
    this.value = formattedValue;
}

方案2:显式传递元素参数(兼容原函数参数逻辑)

如果你的inputComma函数原本设计为接收元素参数,那你的写法只需要确保函数内部正确使用传入的参数即可:

// 接收元素参数的inputComma函数
function inputComma(elem) {
    const rawValue = elem.value.replace(/,/g, '');
    const formattedValue = rawValue.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
    elem.value = formattedValue;
}

// 绑定事件(你的第一种写法调整后即可用)
document.querySelectorAll("input[data-pattern='comma']").forEach(elem => {
    elem.addEventListener('keyup', function() {
        inputComma(elem);
    });
});

方案3:使用箭头函数+事件对象(灵活获取元素)

也可以通过事件对象的target属性获取当前元素,箭头函数不影响这里的取值:

document.querySelectorAll("input[data-pattern='comma']").forEach(elem => {
    elem.addEventListener('keyup', (e) => {
        inputComma(e.target);
    });
});

// inputComma函数同方案2,接收元素参数
function inputComma(elem) {
    // 格式化逻辑...
}

关键说明

  • 箭头函数作为事件处理函数时,this不会指向触发事件的元素,但你通过elem变量或者e.target获取元素的方式是完全可行的;
  • 原jQuery的$(this)可以直接替换为纯JS的this(方案1)或者传入的元素参数(方案2/3);
  • 注意格式化时先移除已有逗号,避免重复添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:48