在javascript case语句中检测星号(shift + 8)

时间:2018-04-06 17:13:34

标签: javascript

我有以下代码,用于检测按下星号的时间。这适用于 条形码扫描程序 。然而,显然这是在每次按下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号作为开头。我终于做了我应该从头开始做的事情,并将扫描仪本身的前缀更改为严重的重音。

它现在完美运作。我很感激你的时间。

2 个答案:

答案 0 :(得分:0)

使用KeyboardEvent.key代替KeyboardEvent.which(顺便说一句 - 从标准中移除)。 string属性返回可打印字符(如果可以),或者控件名称,空格(例如Enter)和特殊键(对于其他情况,请阅读link处的文档)。

因此,在您的情况下,它将为 shift + 8 返回 *(星号),并为 Enter <返回输入 / em> key。

&#13;
&#13;
func bytesToString(k string, m map[string]interface{}) {
    if b, ok := m[k].([]byte); ok {
        m[k] = string(b)
    }
}
&#13;
KeyboardEvent.key
&#13;
&#13;
&#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不应该伤害任何东西,但它也是多余的和不必要的。