Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用条形码阅读器防止在chrome中打开下载窗口_Javascript_Barcode Scanner - Fatal编程技术网

Javascript 使用条形码阅读器防止在chrome中打开下载窗口

Javascript 使用条形码阅读器防止在chrome中打开下载窗口,javascript,barcode-scanner,Javascript,Barcode Scanner,我的网站(MVC3,C#)和条形码阅读器有这个问题。 在我的表格中,我有如下内容: <ajax form....> <input type=text /> <div id=list> </div> </form> 输入由条形码阅读器填充,并自动提交表单,该表单使用ajax将id=list填充到div中。 我的问题是,在chrome和ie中,文本提交后,chrome中会出现下载窗口,ie中会出现收藏夹窗口。我想这是因为条形码阅

我的网站(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解决这个问题

谢谢

我找到了链接,但唯一的解决办法是更改扫描仪的默认字符。。。我不确定我能不能改变我的,尽管如此,像你一样,我也在寻找一个与浏览器相关的修复。。也许是javascript。我将尝试用javascript处理字符,以防止这种情况发生。。。如果我成功了,我会尽量记得回来告诉你,呵呵

我认为这解决了问题

$(document).ready(function(){
    $("#input").keydown(function(e){
        if(e.which==17 || e.which==74){
            e.preventDefault();
        }else{
            console.log(e.which);
        }
    })
});
让我知道他是否也适合你。。确保也清空缓存…

我的扫描仪(Intermec SR30)设置为在条形码后应用3个新行字符。我通过打开Vim,插入,然后扫描条形码发现了这一点。然后我将文件分类到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)在进入打开页面之前被浏览器弄脏了。这个问题也困扰着Firefox30.0。

这段代码对我来说很有用

$(document).ready(function(){
    $("#input").keydown(function(e){
        if(e.which==17 || e.which==74 || e.keyCode == 13){
            e.preventDefault();
        }
    })
});

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

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

下面的代码不起作用。因为如果条形码值中包含“J”字符,则无法获得正确的结果。我们尝试添加e.ctrlkey控件,但这次只检索条形码的一个字符。通过js解决问题似乎很难。也许最好的选择是更改扫描仪设置

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

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

document.addEventListener('keydown',函数(事件){
if(event.keyCode==13 | | event.keyCode==17 | | event.keyCode==74)
event.preventDefault();
});

在我们的angularjs应用程序中,我们使用以下指令解决了此问题:

(function () {
    "use strict";

    angular
        .module("Xeon.core")
        .directive("xnOnBarcodeKeydown", xnOnBarcodeKeydown);

    var whiteList = [67, 86, 65, 88];

    /** @ngInject */
    function xnOnBarcodeKeydown() {
        return function (scope, element, attrs) {
            element.bind("keydown",
                function (event) {

                    if (event.ctrlKey && whiteList.indexOf(event.which) === -1) {
                        event.stopImmediatePropagation();
                        event.preventDefault();
                        event.stopPropagation();
                        return false;
                    }

                    if (event.which === 13) {
                        scope.$apply(function () {
                            scope.$eval(attrs.xnOnBarcodeKeydown, { 'event': event });
                        });

                        event.preventDefault();
                    }
                });
        };
    }
})();

角度版本:

import { Directive, EventEmitter, HostListener, Output } from '@angular/core';

@Directive({ selector: '[appXnOnBarcodeKeydown]' })
export class XnOnBarcodeKeydownDirective{

  @Output() onEnter = new EventEmitter();

  private whiteList = [67, 86, 65, 88];

  @HostListener('keydown', ['$event'])
  keyDown(event) {

    if (event.ctrlKey && this.whiteList.indexOf(event.which) === -1) {
      event.stopImmediatePropagation();
      event.preventDefault();
      event.stopPropagation();
      return false;
    }

    if (event.which === 13) {
      this.onEnter.emit(event);
      event.preventDefault();
    }
  }
}

我的条形码包含
-
哪个键码是173,它将屏幕分割为单列模式,谢谢@Felipe AlmeidaIt还将阻止复制粘贴命令我已向其添加了小补丁,它将只阻止ctrl+j var prevKey='';$(“输入”).keydown(函数(e){if(e.which==74&&prevKey==17'){console.log('Ctrl+j occered');e.preventDefault();}if(e.which==17){prevKey=17;}else{prevKey='';});