如何实现点击按钮结合setTimeout移除input内R$等特殊符号
问题根因
你的代码无法正常运行是两个写法错误导致的:
- 传入
setTimeout的clean属于函数表达式,作用域仅局限在setTimeout的回调内部,HTML内联的onclick="clean()"在全局作用域找不到对应函数,点击自然不会触发 - 你错误将onclick赋值逻辑写在setTimeout回调内,就算等定时器触发,这行代码也是给全局window对象绑定点击事件,还直接把输入框替换后的值赋值给了onclick属性,完全不符合事件绑定的语法逻辑
正确实现方案
把清理逻辑抽成独立可复用的函数,同时支持延迟自动执行和按钮点击触发即可,可直接参考下面的代码:
基础写法(兼容你原来的内联onclick绑定)
JS代码:
// 函数定义在全局作用域,两种触发方式都能访问到 function clean() { const input = document.getElementById('value') // 仅需移除R$时用这个正则,更精准 // input.value = input.value.replace(/R\$/g, '').trim() // 保留原有移除所有指定特殊字符的逻辑用这行 input.value = input.value.replace(/[!$(){}[\]:;R<+?\\>]/g,'').trim() } // 3秒延迟自动执行清理 setTimeout(clean, 3000)
HTML代码无需大幅修改:
<input id="value" name="item_valor" value="R$ 14,99" > remover simbolo pagseguro <br> <button onclick="clean()">clean</button>
更规范的无全局函数写法
如果不想污染全局作用域,推荐直接在JS里通过事件监听绑定按钮逻辑,不需要在HTML里写内联onclick:
// 等DOM加载完成后再绑定事件 document.addEventListener('DOMContentLoaded', () => { const input = document.getElementById('value') const cleanBtn = document.querySelector('button') function clean() { input.value = input.value.replace(/R\$/g, '').trim() } // 延迟自动执行 setTimeout(clean, 3000) // 绑定按钮点击事件 cleanBtn.addEventListener('click', clean) })
对应的HTML可以去掉按钮上的onclick属性:
<input id="value" name="item_valor" value="R$ 14,99" > remover simbolo pagseguro <br> <button>clean</button>
补充说明:如果只需要移除
R$符号,不需要移除其他特殊字符,直接用/R\$/g的正则即可,性能更好也不会误删输入内容里其他合法的R或者$字符。
内容的提问来源于stack exchange,提问作者Thiago Vinic
相关产品推荐
相关产品推荐

