在多个输入字段上粘贴多个数字

fli*_*777 4 html javascript forms jquery webforms

我在我的网站上有一个使用6个输入字段的表单.网站访问者只需在这6个框中输入一个6位数的代码.问题是他们将得到6位数的代码,并且理想的是允许他们简单地将我们发送到他们的6位数代码复制到这些输入字段中,只需将粘贴放入第一个输入字段并使剩下的5位数字去进入剩下的5个输入字段.它只比让每个数字手动输入每个输入字段容易得多.

这是我们目前使用的代码,但可以轻松更改以完成上述内容:

<input type="text" maxlength="1" class="def-txt-input" name="chars[1]">
<input type="text" maxlength="1" class="def-txt-input" name="chars[2]">
<input type="text" maxlength="1" class="def-txt-input" name="chars[3]">
<input type="text" maxlength="1" class="def-txt-input" name="chars[4]">
<input type="text" maxlength="1" class="def-txt-input" name="chars[5]">
<input type="text" maxlength="1" class="def-txt-input" name="chars[6]">
Run Code Online (Sandbox Code Playgroud)

我在这里看到了类似的帖子:在多个文本字段上粘贴序列号

但它没有我想要的解决方案.理想情况下,这可以使用jQuery或纯JavaScript来实现.

Nop*_*ope 6

编辑

我不喜欢我在paste活动中使用的计时器解决方案以及仅使用inputpaste事件的复杂性.

看了一会儿后,我添加了一个使用2之间混合的解决方案.代码似乎完成了现在所需要的所有操作.

剧本:

var $inputs = $(".def-txt-input");
var intRegex = /^\d+$/;

// Prevents user from manually entering non-digits.
$inputs.on("input.fromManual", function(){
    if(!intRegex.test($(this).val())){
        $(this).val("");
    }
});


// Prevents pasting non-digits and if value is 6 characters long will parse each character into an individual box.
$inputs.on("paste", function() {
    var $this = $(this);
    var originalValue = $this.val();

    $this.val("");

    $this.one("input.fromPaste", function(){
        $currentInputBox = $(this);

        var pastedValue = $currentInputBox.val();

        if (pastedValue.length == 6 && intRegex.test(pastedValue)) {
            pasteValues(pastedValue);
        }
        else {
            $this.val(originalValue);
        }

        $inputs.attr("maxlength", 1);
    });

    $inputs.attr("maxlength", 6);
});


// Parses the individual digits into the individual boxes.
function pasteValues(element) {
    var values = element.split("");

    $(values).each(function(index) {
        var $inputBox = $('.def-txt-input[name="chars[' + (index + 1) + ']"]');
        $inputBox.val(values[index])
    });
};?
Run Code Online (Sandbox Code Playgroud)

DEMO