为了账号安全,请及时绑定邮箱和手机立即绑定

被注入输入字段的字符

被注入输入字段的字符

慕码人8056858 2021-06-30 07:47:21
我确定这是我错过的非常愚蠢的事情。我正在编写一个小片段,为从输入字段中抓取的字符串添加一个连字符。连字符只有在我们到达位置 4 时才会添加,所以我可以输入 123 并且连字符不会出现。如果我输入 1234,它会自动更改为 1234-。问题在于处理粘贴,在 jQuery 内的某处(在我的代码执行后),它向字段中注入了更多字符。我的方法很简单。我查看 keyup 和 keydown 事件,检查输入并插入连字符。对于粘贴,我什至查看粘贴,抓住字符串,拆分它并根据是否存在连字符插入一个连字符。$('[id$="field"]').on('paste', function (event) {    var element = this;    var text = event.originalEvent.clipboardData.getData('text').split('');    if (text.length > 4 && text.indexOf('-') < 0) {        text.splice(4, 0, '-');        $(element).val(text.join(''));    }});$('[id$="field"]').bind('keyup keydown', function (event) {    var input = $(this).val();    if (input.length === 4 && event.keyCode !== 8) {        $($(this).val(input + '-'));    }});在keyup与keydown听众的作品就好了。如果我在 12345 中粘贴,当我$(element).val(text.join(''));在 jQuery 执行它的操作时,当我点击了额外的字符时,我最终会得到 1234-5 。我比较困惑。有任何想法吗?
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

由于您通过直接更新输入框的值来覆盖典型的“粘贴”行为,因此您需要防止“默认”粘贴行为。


$('[id$="field"]').on('paste', function (event) {

    event.preventDefault();

    // ...


查看完整回答
反对 回复 2021-07-01
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信