如何去除粘贴字符串的小数点?JavaScript粘贴事件异常排查
问题原因
你遇到的问题核心是没有阻止默认的粘贴行为:
- 触发
paste事件时,你在else分支里直接设置了处理后的值,但未调用e.preventDefault(),浏览器会在你的代码执行完成后,自动执行默认粘贴操作——把剪贴板里原始的11.11粘贴到输入框。 - 最终结果就是你设置的
1111和浏览器默认粘贴的11.11拼接在一起,变成了111111.11。
修复方案
修改代码,在else分支里也加上e.preventDefault(),先阻止默认粘贴行为,再设置处理后的值:
$(document).ready(function () { $('#MY_IG_ig > div.a-IG-body').on('paste', function (e) { var clipboardData, pastedData; clipboardData = e.originalEvent.clipboardData || window.clipboardData; pastedData = clipboardData.getData('Text'); pastedData = pastedData.split('.').join(''); if (!/^\d+$/.test(pastedData)) { e.preventDefault(); alert('Enter a valid number!'); } else { e.preventDefault(); // 阻止默认粘贴行为 $(e.target).val(pastedData); } }); });
额外说明
- 不管粘贴内容是否合法,都需要阻止默认行为:合法时手动设置处理后的值,不合法时阻止粘贴并提示,这样就能避免默认行为和自定义逻辑冲突。
- 测试时可在
else分支打印$(e.target).val(),确认设置后的值不会被默认粘贴覆盖。
内容的提问来源于stack exchange,提问作者TonyS
相关产品推荐
相关产品推荐

