我有以下代码,用于检测按下星号的时间。这适用于 条形码扫描程序 。然而,显然这是在每次按下8时检测到的。如何检测何时按 Shift + 8 ?我尝试了很多方法。我可以使用var isShift = !!e.shiftKey
检测班次何时完成;但是当我尝试if语句时它仍然无效。任何援助将不胜感激。
(function( $ ) {
$.fn.mmpBarcodeReader = function() {
// Initialize buffer, it will contain the barcode scanner output
$(this).data('mmpBarcodeBuffer', '');
// Listen to barcode scanner output
$(this).keydown(function(e){
//console.log(this);
//console.log(e);
switch (e.which) {
// STX Prefix (Start of Text)
case 56:
if(e.shiftKey) {
$(this).trigger('start.mmp.barcodereader');
$(this).data('mmpBarcodeReading', true);
break;
} else {
console.log('without shift');
}
// ETX Suffix (End of Text)
case 13:
$(this).trigger('end.mmp.barcodereader', $(this).data('mmpBarcodeBuffer'));
$(this).data('mmpBarcodeReading', false);
$(this).data('mmpBarcodeBuffer', '');
break;
// Regular char
default:
if ($(this).data('mmpBarcodeReading')){
$(this).trigger('char.mmp.barcodereader', String.fromCharCode(e.which));
$(this).data('mmpBarcodeBuffer', $(this).data('mmpBarcodeBuffer') + String.fromCharCode(e.which));
}
break;
}
});
// Sometimes the STX Prefix triggers alternately the keyup & keydown events. Let's fix it!
$(this).keyup(function(e){
if (e.which == 20){
$(this).trigger('start.mmp.barcodereader');
$(this).data('mmpBarcodeReading', true);
}
});
};
}(jQuery));
更新: 谢谢你们两位回复我。似乎这个问题并不像我想象的那么简单,因此我将提供更多信息。所以这个脚本用于扫描条形码。条形码以星号作为前缀,以表示开头。问题是它只看到8号作为开头。我终于做了我应该从头开始做的事情,并将扫描仪本身的前缀更改为严重的重音。
它现在完美运作。我很感激你的时间。
答案 0 :(得分:0)
使用KeyboardEvent.key
代替KeyboardEvent.which
(顺便说一句 - 从标准中移除)。 string
属性返回可打印字符(如果可以),或者控件名称,空格(例如Enter)和特殊键(对于其他情况,请阅读link处的文档)。
因此,在您的情况下,它将为 shift + 8 返回 *(星号),并为 Enter <返回输入 / em> key。
func bytesToString(k string, m map[string]interface{}) {
if b, ok := m[k].([]byte); ok {
m[k] = string(b)
}
}
&#13;
KeyboardEvent.key
&#13;
答案 1 :(得分:0)
我不确定为什么在if
中使用switch
语句会出现错误,但这是一个如何使用它的示例。
document.querySelector('input').addEventListener('keydown', e => {
switch (e.keyCode) {
case 56:
if (e.shiftKey) {
console.log('asterisk');
} else {
console.log('8');
}
break;
}
});
<input>
只需确保if
位于case
内,并且必要时仍然有break
。
对于隐式布尔转换执行!!e.shiftKey
不应该伤害任何东西,但它也是多余的和不必要的。