使用条形码阅读器时,如何防止Chrome浏览器打开下载窗口

7

我的网站(MVC3、C#)和条形码阅读器有问题。 在我的表单中,类似于这样:

<ajax form....>

<input type=text />

<div id=list>
</div>

</form>

输入框由条形码阅读器填充,使用ajax自动提交表单,并将id为list的div填充。我的问题是,在chrome和ie中,文本提交后,chrome会出现下载窗口,ie会出现收藏夹窗口。我想这是因为条形码阅读器在文本中插入了[CR][LF],从而打开了这些窗口。我认为条形码阅读器在某个时刻插入了ctrl-j,因为该组合在chrome中打开了下载窗口,在ie中打开了收藏夹,但是在firefox中,下载窗口不会打开(也是ctrl-j)。我不想让客户配置条形码阅读器以使我的页面正常工作,因此我希望在javascript中找到解决该问题的方法。谢谢!
6个回答

5
我找到了这个链接(链接),但唯一的解决方案是更改扫描仪的默认字符...我不确定我能否更改我的扫描仪,所以像你一样,我也在寻找与浏览器相关的解决方案。也许可以尝试使用JavaScript来处理字符,以防止发生这种情况... 如果我成功了,我会回来告诉你的哈哈哈哈。
我认为这解决了问题...
$(document).ready(function(){
    $("#input").keydown(function(e){
        if(e.which==17 || e.which==74){
            e.preventDefault();
        }else{
            console.log(e.which);
        }
    })
});

请告诉我这对你是否有用。确保您也清空缓存...


我的条形码包含“-”,其键码为173,它将屏幕分割成单列模式。谢谢@Felipe Almeida。 - TIGER
1
它还将阻止复制粘贴命令,我已经对其进行了小修复,它只会阻止ctrl + jvar prevKey = ''; $("input").keydown(function(e){ if(e.which==74 && prevKey == '17'){ console.log('Ctrl +j occered'); e.preventDefault(); } if(e.which==17) { prevKey = 17; } else { prevKey = ''; } }); - Rizwan Abbas

1
这段代码对我有效。
$(document).ready(function(){
    $("#input").keydown(function(e){
        if(e.which==17 || e.which==74 || e.keyCode == 13){
            e.preventDefault();
        }
    })
});

0

这对我有效。

<script>
  document.addEventListener('keydown', function(event) {
    if( event.keyCode == 13 || event.keyCode == 17 || event.keyCode == 74 )
      event.preventDefault();
  });
</script>

0

我的扫描仪(Intermec SR30)设置为在条形码后应用3个新行字符。我通过打开Vim,插入,然后扫描条形码来发现这一点。然后我将文件cat到od -ax:

0000000   3   1   2   2   1   0   9   9   9   4   8   5   2   8  nl  nl
       3133    3232    3031    3939    3439    3538    3832    0a0a
0000020  nl
           000a
0000021

我可以使用以下代码捕获“nl”:

$(document).ready(function(){
    $("#barcode").keypress(function(e){
        console.log('"' + e.keyCode + '"\n');
        if(e.keyCode == 13){
            e.preventDefault();
        }
    })
});

但是下载窗口打开事件(从键盘按Ctrl+j)在到达打开页面之前被浏览器吞噬了。这个问题也困扰着Firefox 30.0。


0

批准答案上的代码会阻止CTRL和J键。这将仅阻止CTRL + J。

$("#barcode").keypress(function(event){
    if(event.keyCode == 74 && event.ctrlKey){
        event.preventDefault();
    }
});

0
以下代码无法正常工作。因为如果条形码值中有'J'字符,您将无法获得正确的结果。我们尝试添加e.ctrlkey控制,但这次只能检索到条形码的一个字符。通过js解决方案似乎很困难。也许最好的选择是更改扫描仪设置。
$(document).ready(function(){
    $("#input").keydown(function(e){
        if(e.which==17 || e.which==74 || e.keyCode == 13){
            e.preventDefault();
        }
    })
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接