将参数传递给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中打印未定义)? 我怎么能通过?

您的console.log无法正常工作,因为它在脚本加载时已初始化。 您需要做的是在按下键时触发您的function。

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

你的意思是在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发生在页面加载上。 然后,您初始化绑定,因此您从未看到更新的结果。

试试这个

  $(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因为它们设置为undefined而我必须在我的程序的另一部分启动它们 – user3030188

触发keydown事件时调用您的函数,也许您可​​以将变量发送到函数而不是将其设置为全局。 – L105

是的,这是有道理的,但我想知道的是,如果我在程序的另一部分中定义它们是否可以传入a或b作为case语句,它们会被覆盖为什么它会返回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`*/