2014-02-17 47 views
1

如何將參數傳遞到jquery的keydown方法中,因爲每當我使用其他地方定義的變量時,它都會返回undefined。我假設它是因爲#target是窗口,因此它不在範圍內,但即使如此,我也無法將key.which()與外部參數進行比較,然後將其分配給另一個屬性。將參數傳遞給KeyDown

例子:

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中)?我怎麼能通過?

+0

這很正常,因爲當檢測到'keydown'事件時,當腳本加載時觸發'console.log'。 – L105

+0

是的,但問題是,在關鍵內部,我不能使用a和b,因爲他們被設置爲undefined,我必須在我的程序的另一部分啓動它們 – egdenis

+0

當'keydown'事件觸發時調用你的函數,也許您可以將該變量發送給該函數,而不是將其變爲全局變量。 – L105

回答

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

是啊,這是有道理的,但我想知道的是,如果我在程序的另一部分中定義它們,是否可以傳入a或b作爲case語句,它們將被覆蓋,爲什麼它會返回undefined? – egdenis

+0

我修改了我的例子來演示如何去做。 – L105

1

難道你的意思是在​​函數中有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發生在頁面加載。然後之後,你初始化綁定,所以你從來沒有看到更新的結果。

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傳遞的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`*/