被注入输入字段的字符

我确定这是我错过的非常愚蠢的事情。


我正在编写一个小片段,为从输入字段中抓取的字符串添加一个连字符。连字符只有在我们到达位置 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 。


我比较困惑。


有任何想法吗?


慕码人8056858
浏览 157回答 1
1回答

牧羊人nacy

由于您通过直接更新输入框的值来覆盖典型的“粘贴”行为,因此您需要防止“默认”粘贴行为。$('[id$="field"]').on('paste', function (event) {&nbsp; &nbsp; event.preventDefault();&nbsp; &nbsp; // ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript