使用条形码扫描仪将焦点从一个输入更改为下一个输入

时间:2016-02-24 22:57:56

标签: javascript jquery barcode-scanner

我正在使用条形码扫描仪将数据输入到网页的输入字段中。我在第一个输入字段上设置了表单和自动对焦。当第一个条形码输入第一个输入字段时,我想重点跳转到下一个输入字段。但是,只要我输入第一个条形码,表单就会提交'。这是我正在使用的HTML:

    <form id="barcode1" name="barcode" method="Post" action="#">

       <div>
          <label for="S1">Barcode 1 </label>
          <input id="S1" class="bcode" type="text" name="S1" autofocus/> 
          <label for="S2">Barcode 2 </label>
          <input id="S2" class="bcode" type="text" name="S2" />      
          <label for="S3">Barcode 3 </label>
          <input id="S3" class="bcode" type="text" name="S3" />
       </div>
       <p><input type="submit" name="Submit" value="Submit"></p>

    </form>

我尝试过来自类似SO问题here和[此处](http://jsfiddle.net/davidThomas/ZmAEG/)的解决方案,但它们似乎无法发挥作用。

理想情况下,我希望有一个像这样的解决方案(上面的第二个链接),所以请让我知道这不起作用的地方或原因以及我可以做些什么来解决它。

    $('form').on('keypress','input',function(e){
        var eClassName = this.className,
            index = $(this).index('.' + eClassName) + 1;
        if (e.which === 13){
            e.preventDefault();
            $('input.' + eClassName)
                .eq(index)
                .focus();
        }
    });

3 个答案:

答案 0 :(得分:1)

如果您的条形码扫描仪是键盘楔形,您应该能够将尾随字符配置为TAB。

默认情况下,您的扫描仪似乎是以ENTER(回车)结尾。

另一个选择是检查你的javascript代码中的LF(十进制10)。

答案 1 :(得分:1)

您需要返回false以防止回车键提交表单。

这个问题的答案可以帮助您:Prevent form submission with enter key

//Press Enter in INPUT moves cursor to next INPUT
$('#form').find('.input').keypress(function(e){
    if ( e.which == 13 ) // Enter key = keycode 13
    {
        $(this).next().focus();  //Use whatever selector necessary to focus the 'next' input
        return false;
    }
});

无需对条形扫描仪进行任何更改。

答案 2 :(得分:0)

看起来您的功能永远不会被调用,因为浏览器会在 Enter 上提交表单。您可能必须通过首先拦截提交事件来抑制提交,直到所有字段都填满(或其他一些条件)。

$( "form" ).submit(function( event ) {
  if(/*all req. fields are filled -> submit the form*/)
     $(this).submit();
  event.preventDefault();
});