将参数传递给KeyDown

时间:2014-02-17 03:08:36

标签: javascript jquery undefined scope keydown

如何从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中打印undefined)?我怎么能传入?

3 个答案:

答案 0 :(得分:2)

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
   }
});

答案 1 :(得分:1)

你的意思是在keydown函数中包含console.log吗?

我能够让它回应(正如我所料)这样:

$(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发生在页面加载上。然后之后,你初始化了绑定,所以你从未见过更新过的结果。

答案 2 :(得分:1)

试试这个

    $(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作为案例陈述,如果我在另一部分定义它们   程序会被覆盖为什么它会返回undefined? -   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`*/