Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递给KeyDown_Javascript_Jquery_Undefined_Scope_Keydown - Fatal编程技术网

Javascript 将参数传递给KeyDown

Javascript 将参数传递给KeyDown,javascript,jquery,undefined,scope,keydown,Javascript,Jquery,Undefined,Scope,Keydown,如何将参数从jquery传递到keydown方法中,因为每当我使用在别处定义的变量时,它都返回undefined。我假设它是因为#target是window,因此它不在范围内,但即使这样,我也很难让它将key.which()与外部参数进行比较,然后将其分配给另一个属性 例如: var a = 38; var b = 0; $(document).keydown(function(e){ var key = e.which; if (a==key) b=key; }); conso

如何将参数从jquery传递到keydown方法中,因为每当我使用在别处定义的变量时,它都返回undefined。我假设它是因为#target是window,因此它不在范围内,但即使这样,我也很难让它将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中打印未定义)?我如何传入?

您的意思是将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);
  });    
});
在按键功能的范围内,如果按向上箭头,a和b将正确设置


我怀疑发生的事情是您的console.log发生在页面加载时。然后,您初始化了绑定,因此从未看到更新的结果。

您的意思是将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);
  });    
});
在按键功能的范围内,如果按向上箭头,a和b将正确设置

我怀疑发生的事情是您的console.log发生在页面加载时。然后,您初始化了绑定,因此从未看到更新的结果。

试试这个

    $(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)
    });
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`*/
编辑


是的,但问题是在“向下键”中,我不能使用a和b 因为它们被设置为未定义,我必须在 我程序的另一部分–user3030188

需要时调用函数 keydown事件被触发,也许您可以发送变量 而不是使其全球化L105


是的,这很有道理,但我想知道的是我是否能通过考试 a或b作为案例陈述,如果我在 程序会被覆盖吗?为什么会返回未定义的 用户3030188

试试这个

    $(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)
    });
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`*/
试试这个

    $(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)
    });
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`*/
编辑


是的,但问题是在“向下键”中,我不能使用a和b 因为它们被设置为未定义,我必须在 我程序的另一部分–user3030188

需要时调用函数 keydown事件被触发,也许您可以发送变量 而不是使其全球化L105


是的,这很有道理,但我想知道的是我是否能通过考试 a或b作为案例陈述,如果我在 程序会被覆盖吗?为什么会返回未定义的 用户3030188

试试这个

    $(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)
    });
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`*/

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

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

这是正常的,因为加载脚本时会触发
控制台.log
,而不是检测到
keydown
事件时。是的,但问题是在keydown中,我不能使用a和b,因为它们被设置为未定义,我必须在程序的另一部分启动它们当
keydown
事件被触发,可能您可以将变量发送到函数,而不是使其成为全局变量。这是正常的,因为
控制台。日志
是在加载脚本时触发的,而不是在检测到
keydown
事件时触发的。是的,但问题是,在keydown中,我不能使用a和b,因为它们被设置为未定义,并且我没有要在我的程序的另一部分中启动它们,请在触发
keydown
事件时调用您的函数,也许您可以将变量发送到函数,而不是使其全局化。是的,这是有道理的,但我想知道的是,如果我在程序的另一部分中定义它们,是否可以将a或b作为case语句传递他们被覆盖为什么它会返回未定义?我修改了我的示例来演示如何做。是的,这是有道理的,但我想知道的是,如果我在程序的另一部分中定义了它们,我是否可以将a或b作为case语句传递,他们会被覆盖为什么它会返回未定义?我修改了示例来演示如何做信息技术