Web 表单字段(或 Notepad++)中扫描的二维条形码内容缺少 CR LF(换行符)

问题描述 投票:0回答:1

我正在尝试在 Windows PC 上将二维条形码扫描到网页表单字段中。我正在使用扫描仪设备。条形码包含大约 10 个用 [CR][LF] 分隔的值,我相信内容是有序的,因为:

  • 当我将其扫描到普通记事本中时,我得到 10 行,所有行末尾都有 CR LF (HexEditor 显示 0d 0a 值)
  • 当我用手机扫描它时,它也会以换行符显示内容

但是,当我将内容扫描到 Notepad++ 或我的网页表单字段时 - 整个内容只是一行。末尾只有一个 CRLF,这是因为扫描仪默认将行尾放在扫描内容的末尾。

更准确地说,当我将内容扫描到网页中时,页面会注册换行符 [LF],并按 Ctrl+J(“下载”选项卡的快捷方式)执行此操作。因此,它将第一个值打印到字段中,然后跳转到“下载”选项卡并开始将其余内容粘贴到一行中。 我使用 Java 脚本解决了这个问题,该脚本阻止了 Ctrl+J 键事件的默认行为。现在我只需在一行中获取我的领域中的所有内容。

为什么Notepad++(或我的网页表单字段)无法正确注册回车符和换行符? 或者 - 为什么它对于普通记事本的行为有所不同?

任何关于我应该研究什么的提示或建议都是值得赞赏的。

notepad++ oracle-apex barcode-scanner
1个回答
0
投票

我的目标是将具有多个值的二维条形码(水电费账单,PDF417 类型)扫描到具有多个字段的 Oracle Apex 网页中。 条形码中的值用 CRLF 分隔。

我的问题是,一旦我扫描了条形码,只有第一个值被传递到我所在的字段中,然后浏览器跳转到“下载”选项卡并将其余值转储到搜索栏(单行)中。 根据我的理解 - Chrome 将 LF 视为 Ctrl+J 事件,这是“下载”选项卡的快捷方式。

我不会输入条形码或扫描仪类型或其他任何内容,因为这并不重要。您要么遇到过这个问题并且知道我在说什么,要么不知道。

我的解决方案是,由于浏览器确实设法捕获了 LF(即使以一种不好的方式,例如 Ctrl+J),我编写了一个忽略 Ctrl+J 事件的 JavaScript 代码,并将我的字段的内容复制到第二个字段中我用它作为串联占位符。 我将其粘贴到“页面加载时执行”中:

document.addEventListener('keydown', function(event) {
   // Check if CTRL and J are pressed
   if (event.ctrlKey && (event.key === 'j' || event.key === 'J'))  {
      // Prevent the default behavior (opening the downloads window)
      event.preventDefault();
      
      // Concat the partial scanned value into a concat field
      $s("P220_CONCAT", $v("P220_CONCAT") + $v("P220_FIRST_FIELD")+'|');
      $s("P220_FIRST_FIELD", "");
   }
});

此外,我还对 Concat 字段执行了“更改时”动态操作,将连接的字符串发送到数据库过程中进行解析,并将值返回到表单字段中以填充它们。 这有点复杂,但我不会详细讨论这些细节。我的目标是将我的解决方案留在这里,供其他可能遇到同样问题的 Apex 开发人员使用。

另外,如果有更好的解决方案 - 我洗耳恭听:)

© www.soinside.com 2019 - 2024. All rights reserved.