传递参数的KeyDown(Passing Parameters to KeyDown)

2019-10-19 08:37发布

你怎么可以把参数传递从jQuery的该keydown方法,因为每当我在其他地方使用定义的变量则返回undefined。 我认为它是因为#target是窗口,因此它不是在范围但即使如此,我有麻烦就比较key.which()与外部参数,然后将其分配到另一个属性。

例:

var a = 38;
var b = 0;
$(document).keydown(function(e){
  var key = e.which;
  if (a==key)
    b=key;
});
console.log(a+""+b);

每当我试图沿着它返回38 0,这我理解为在该范围内它不是和未在所述相同的线做一些事情(也因为如果我登录B检查中的keydown FUNC打印未定义)? 我怎么能传递一个?

Answer 1:

console.log不工作,因为它被初始化脚本加载时。 什么,你需要做的就是按下该键时触发功能。

// When the document is ready
$(function() {
   $(document).keydown(function(e){
      var key = e.which;
      var a = 'a scoped variable';
      switch (key) {
          // Up arrow
          case 38: 
             a = upArrowFunction(a); // Assign a to the returned value.
             break;
          // Down arrow
          case 40:
             downArrowFunction();
             break;
      }

   });

   function upArraowFunction(a) {
       a = 'I change a, but a is not changed in keydown event';
       return a; // But now I return the changed variable so it will change if a variable is assigned where the function is called.
   }

   function downArrowFunction() {
       // Do something else
   }
});


Answer 2:

难道你的意思是有内部的console.log keydown功能?

我能得到它的回应(如我所期望的)是这样的:

$(function() { /* on page load load */
  var a = 38;
  var b = 0;
  $(document).bind('keydown',function(e){
    var key = e.which;
    if (a === key) {
      b=key;
    }
    console.log(a, b, key);
  });    
});

该keydown功能,a和b的范围内得到适当的设置,如果你打的向上箭头。

我怀疑是发生了什么事是你的console.log发生在页面加载。 然后之后 ,你初始化的绑定,所以你从来没有看到更新的结果。



Answer 3:

尝试这个

    $(document).on("keydown", function(e, key){
      var a = 38;
      var b = 0;
      if (e.which === a) {b = e.which};
      var key = (key === undefined ? b : a);
      return console.log(a + " " + b + " " + key)
    });

编辑

是的,但问题是关键中下来,我不能用A和B,因为他们可以设置为未定义,我要开始他们在我的计划的另一部分 - user3030188

打电话给你的函数时触发keydown事件,也许你可以在变量发送到函数,而不是让它成为全局的。 - L105

严是有道理的,但什么即时知道是我是否能在a或b作为一个case语句通过,如果我的程序为什么会返回不确定他们会得到重写的另一部分定义的呢? - user3030188

尝试这个

function key(e, a, b, key) {
/* settings */
   var a = (a === undefined ? 38 : a);
   var b = (b === undefined ? 0 : b);
   if (e.which === a) {b = e.which};
   var key = (key === undefined ? b : a);
   return console.log(a + " " + b + " " + key)
 };

$(document).on("keydown", key); /* `38` `38` `38` */

/* `a`, `b` */
$(document).on("keydown", key({},undefined,undefined,undefined)); /* `38` `0` `0` */

/* a`, `b`, or `n` */
$(document).on("keydown", function(n) {
  var n = 35;
  key({},37,n,undefined)
}); /* `37` `35` `35`*/

/* `n` */
$(document).on("keydown", function(n) {
  var n = 35;
  key({},n,n,undefined)
}); /* `35` `35` `35`*/


文章来源: Passing Parameters to KeyDown