使用JavaScript / jQuery将制表符后的字符串值剪切并粘贴到下一个输入

我想知道如何实现,使用javascript / jquery,拆分下面列出的字符串 –

abc543567 abc543678 abc223416 abc634567 

分成四个输入,这样每个组都可以移动到一个单独的输入中。 基本上,当我将此字符串复制到第一个输入时,第一个组可以保留在第一个输入中,第二个组可以在第二个输入中移动,依此类推。 在示例中,在组之间,我用作制表符的分隔符。 这是输入的html: https : //jsfiddle.net/2sb6ggz0/

更新HTML:

 

有没有办法达到顶峰?

这是您更新的小提琴: https : //jsfiddle.net/2sb6ggz0/6/

 function split(sep, clazz) { var items = $(clazz); items.each(function (i) { $(this).on("paste", function () { var me = $(this); setTimeout(function () { var splitted = me.val().split(sep); items.each(function (i) { $(this).val(splitted[i]); }); }, 1); }); }) }; split("-", ".query-input") 

您可以通过检测第一个输入中的内容来响应paste事件,并在适当的情况下将其移动到其他三个(请参阅注释)

 // Text to paste: abc543567 abc543678 abc223416 abc634567 // Hook "paste" on the first input $("#input1").on("paste", function() { // Remember the input and wait a second so the paste gets filled in var input = this; setTimeout(function() { // See if it matches our format var n; var value = input.value; var m = /^[ \t]*([\w\d]{9})[ \t]+([\w\d]{9})[ \t]+([\w\d]{9})[ \t]+([\w\d]{9})[ \t]*$/.exec(value); if (m) { // It does, save the values to the other fields for (n = 1; n <= 4; ++n) { $("#input" + n).val(m[n]); } } }, 0); }); 
 

这是一个可能的解决方案。

 $("input[name=query]").on("paste", function() { var $this = $(this); setTimeout(function() { var id = $this.attr("id"), no = parseInt(id.substr(5)), groups = $this.val().split(/\s+/); if (groups) { var i = 0; while (no <= 4 && i < groups.length) { $("#input" + no).val(groups[i]); ++no; ++i; } } }, 0); }); 

小提琴: https : //jsfiddle.net/robbyn/rn9ydtop/

键入一定数量的字符后,可以使用事件侦听器跳到下一个框。

在jQuery中它会是这样的

 $('input').on('keyup', function(e) { if (e.target.val().length === 9) { $(this).nextAll('input').first().focus(); } })