Javascript 使用条形码阅读器防止在chrome中打开下载窗口
我的网站(MVC3,C#)和条形码阅读器有这个问题。 在我的表格中,我有如下内容: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中会出现收藏夹窗口。我想这是因为条形码阅
<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='';});