【发布时间】:2016-04-05 02:49:21
【问题描述】:
我正在编写一个 Web 应用程序,该应用程序在输入字段中接受来自条形码阅读器的条形码。用户可以输入他/她想要的任意数量的条形码(即没有理由预先定义限制)。我想出了一种蛮力方法,它创建 预定义 数量的隐藏输入字段,然后在输入每个条形码时依次显示下一个。这是执行此操作的代码:
<form id="barcode1" name="barcode" method="Post" action="#">
<div class="container">
<label for="S1">Barcode 1   </label>
<input id="S1" class="bcode" type="text" name="S1" onchange="packFunction()" autofocus/>
<label for="S2" hidden = "hidden">Barcode 2   </label>
<input id="S2" class="bcode" type="text" hidden = "hidden" name="S2" onchange="packFunction()" />
<label for="S3" hidden = "hidden">Barcode 3   </label>
<input id="S3" class="bcode" type="text" hidden = "hidden" name="S3" onchange="packFunction()" />
<label for="S4" hidden = "hidden">Barcode 4   </label>
<input id="S4" class="bcode" type="text" hidden = "hidden" name="S4" onchange="packFunction()" />
<label for="S5" hidden = "hidden">Barcode 5   </label>
<input id="S5" class="bcode" type="text" hidden = "hidden" name="S5" onchange="packFunction()" />
</div>
<div class="submit">
<p><input type="submit" name="Submit" value="Submit"></p>
</div>
</form>
<script>
$(function() {
$('#barcode1').find('.bcode').keypress(function(e){
// to prevent 'enter' from submitting the form
if ( e.which == 13 )
{
$(this).next('label').removeAttr('hidden')
$(this).next('label').next('.bcode').removeAttr('hidden').focus();
return false;
}
});
});
</script>
这似乎是一个不雅的解决方案。在输入每个条形码之后创建一个新的输入字段似乎会更好。我曾尝试使用 jQuery 在 DOM 中创建新的输入元素,并且可以显示新的输入元素。但它使用 onchange 事件,该事件检测原始输入字段中的更改。如何转移焦点并在新创建的输入字段中检测 onchange?这是我用来测试这个想法的代码:
<div>
<input type="text" id="barcode" class="original"/>
</div>
<div id="display">
<div>Placeholder text</div>
</div>
<script src="./Scripts/jquery-2.2.0.min.js"></script>
$(function () {
$('#barcode').on('change', function () {
$('#display').append('<input id='bcode' class='bcode' type='text' name='S1' autofocus/>')
});
});
</script>
获得这些条形码后,我将它们打包成数组,然后将它们发布到服务器端脚本以运行 mySQL 查询以根据条形码检索数据,然后将其发布回客户端。所以我必须实现的一部分是输入到不同输入字段的每个条形码都需要被推入一个数组中。
是否有一种优雅的方式来动态创建输入字段,然后检测这些更改以创建更多输入字段?
【问题讨论】:
-
你可以使用一个可以包含多个条形码的
input元素吗? -
理论上我可以(这是我的代码错误的做法),但从美学的角度来看,它看起来并不好,并且可能会让用户感到困惑。此外,这意味着当我提交条形码序列时,我必须将数据解析为单个条形码。
标签: javascript jquery html