【问题标题】:Prevent user from typing and pasting in text field and allow reading from a USB Barcode reader only防止用户在文本字段中键入和粘贴,仅允许从 USB 条形码阅读器读取
【发布时间】:2013-12-09 08:19:44
【问题描述】:

我有一个 HTML 输入字段,例如

<input type="text" name="TextBox1" id="TextBox1">

我想防止使用键盘打字和使用鼠标粘贴,同时只允许输入来自 USB 条形码阅读器的输入。 我尝试使用:

$( document ).ready(function() {        
    $('#TextBox1').keydown(function(e) { 
        if ($(e.target).is('input, textarea')) {
           e.preventDefault();
        }                  
    });    
});

但它会阻止来自每个来源的输入,包括 USB 条形码扫描仪。

有什么建议吗?有可能吗?

【问题讨论】:

  • 为什么不结合用户输入和条形码输入呢?如果您找到条形码,例如添加产品。如果没有,请搜索您的产品。
  • PS:我希望你明白你的 js 代码不会保证输入的来源? Zsolt Szilagy 提到的一些迹象,如低输入延迟(不确定它是否不会立即粘贴整个代码)可用于区分用户输入和扫描仪,但这并不意味着用户不能解决您在客户端的限制。事实上,任何人都可以轻松地做到这一点,所以不要将其用作验证。

标签: javascript html javascript-events jquery


【解决方案1】:

使用条形码扫描仪时,您可以预期该字段会在几百毫秒内被填满,而人类至少需要一到两秒才能输入 10 位数字。当输入第一个数字时,您可以设置超时,例如300 毫秒。如果所需的值长度未达到 300ms,清场即可。

这并不能防止有人以欺诈方式高速输入随机数字,但毕竟永远不要相信用户数据。

编辑:手头没有代码 sn-p,但伪代码可能是

on keydown
    if(value.length < 2)
        timeout = now+300
    elseif(now > timeout and value-legth < required legth)
        value=''

【讨论】:

    【解决方案2】:

    我不确定条码扫描器会引发什么事件,但您是否尝试过:

    <input type="text" name="TextBox1" id="TextBox1" onkeydown="return false;">
    

    【讨论】:

    • 所以我猜条形码扫描仪模拟按键。如果您查看事件的键码,您会得到什么值?
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2011-01-07
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多