我正在设计一个web应用程序,我正在考虑加入一些条形码读取,以方便数据输入。假设我有一个快递员需要做的任务清单。我想打印类似于以下页面的内容:
+----------------------------------------------------------------------+
| Task List || || |||| || || ||| (a) |
| |
| Task One ||| || |||||| || ||| (b) |
| Task Two ||| || || | | || ||| (c) |
| Task Three | |||||| || ||| |||| (d) |
| |
| ||||| |||| || || ||| (e) |
+----------------------------------------------------------------------+条形码由每行末尾的||||| | ||| || (x)表示。打印页面应该是直接使用条形码servlet作为烧烤。我想有一个一般的方式来拦截这些条形码并在jQuery中做一些事情。例如:
条形码(a)可以是goto:/tasklist/123:
add:31222:,add:31223,add:31224:
submit::当扫描条形码(A)时,我会转到那个页面。当扫描条形码(b)、(c)、(d)时,我会在页面中填充文本输入。当扫描条形码(e)时,我会提交表格。我正在考虑有某种形式的jQuery侦听器,它可以在我可以根据条形码的第一个命令向其注册操作的每一个页面上使用。我知道我可以对条形码设备进行编程来结合一些逻辑,但我想避免它,这样任何条形码都可以,而且我不需要处理它们。
我甚至认为,每个条形码可能必须从一些神奇的令牌开始,以区分常规输入和条形码输入。也许有点像$**$:goto:/tasklist/123:。那么,问题是如何执行jQuery来拦截这组命令,以及为我创建的不同操作(例如:$**$:add:31222:)注册处理程序的正确方法是什么?
发布于 2010-11-27 12:27:47
我也做过类似的申请,所以这是我的两分钱。
USB扫描仪基本上像USB键盘一样工作。大多数用户将发送一个enter键作为终止字符,但这可以在大多数设备上进行配置。我依靠终止字符来驱动UI中的操作。(默认情况下,输入将提交当前选定的表单。)
另一个问题是,如果这是一个移动应用程序,您确实希望尽可能避免往返服务器。我解决了这个问题,在UI中有大量的应用程序逻辑,但是所有业务逻辑仍然在服务器上,因此要使操作生效,用户需要连接并能够将其发送到服务器。
所以,关键是你的问题。考虑一下这样的事情:
var state = 'WAITING'; # super simple state
function add(data) {
# courier checks an item, 'data' contains the data from the scanner
}
function input_handler(input) {
if (state == 'WAITING') {
if (input == 'DONE' || input == 'EXIT') {
state = 'DONE';
# abort, whatnot
} else {
state = 'SCAN';
input_handler(input); # recurse, with new state
}
} else {
add(input);
}
}这基本上是一个状态机,手动编码。当信使检查‘我想开始扫描这个订单’-条形码,你进入一个模式,每个输入到您的扫描处理程序。当他扫描“I‘s done"-barcode时,您可以验证结果等等,这可以通过实际使用一个真正的状态机来改进。
你应该尽量简化条形码。像“扫描”、“退出”、“NOTHING_MORE_TO_SCAN”这样的命令是好的,因为它们是通用的,您的应用程序不需要解析条形码的含义。
保持简单的另一个原因是,你会遇到标签被损坏并且无法扫描的情况。然后,用户必须能够手动输入数据,而无需花费额外的时间查找特殊字符等。
https://stackoverflow.com/questions/3974446
复制相似问题