将数组重置为空数组不起作用

时间:2013-01-16 13:17:21

标签: jquery arrays key clear keyevent

我做错了什么?调用函数后,似乎没有清除数组。

如果先按 ctrl + c 然后按 ctrl + alt + c ,则不会调用第二个功能(仅当您再按一次时)。

var key = function (keys, fn) {
  var arr = [];
  $(document).on({
    keydown: function (e) {
      arr.push(e.which);
      if (arr.join(', ') === keys) {
        fn(e);
        arr = [];
      }
    },
    keyup: function (e) {
      arr = [];
    }
  });
};

// ctrl + c
key('17, 67', function (e) {
  alert('ctrl+c');
});

// ctrl + alt + c
key('17, 18, 67', function () {
  alert('ctrl+alt+c');
});

这是 fiddle

2 个答案:

答案 0 :(得分:2)

编辑:此代码显示效果不佳。它不会看到 Ctrl + C Cltrl + C + V 之间的区别!

试试这段代码:

var key = function (keys, fn) {  
  $(document).on({
    keydown: function (e) {
      var arr = [];
      if(e.ctrlKey)
        arr.push("17");
      if(e.altKey)
        arr.push("18");
      arr.push(e.which);
      if (arr.join(', ') === keys) {
        fn(e);        
      }
    }
  });
};

// ctrl + c
key('17, 67', function (e) {
  alert('ctrl+c');
});

// ctrl + alt + d
key('17, 18, 68', function () {
  alert('ctrl+alt+c');
});

您可以在keydown事件发生时检查是否按下了按键,而不是将按键收集到全局数组中。这对我很好:http://fiddle.jshell.net/27WGw/2/注意我将Ctrl + Alt + c更改为Ctrl + Alt + d,因为第一个是我机器上的全局热键)

答案 1 :(得分:2)

代码中的问题不是数组。

您没有调用您的密钥,因为您在看到警报窗口时释放密钥

检查在此处工作的相同代码:http://jsfiddle.net/WucCQ/1/ - 观看控制台日志

var key = function (keys, fn) {
  var arr = [];
  $(document).on({
    keydown: function (e) {
      arr.push(e.which);
      if (arr.join(', ') === keys) {
        fn(e);
        arr = [];
      }
    },
    keyup: function (e) {
      arr = [];
    }
  });
};

// ctrl + c
key('17, 67', function (e) {
  console.log('ctrl+c');
});

// ctrl + alt + c
key('17, 18, 67', function () {
  console.log('ctrl+alt+c');
});