2014-02-07 52 views
1

我想以更好,最優化的方式編寫它。我想也許我應該使用jQuery的每個功能,但不知道如何寫它。基本上有7個按鈕的列表,並且NUM鍵和常規數字鍵都連接到相關按鈕。 的HTML是這裏http://jsfiddle.net/wAwed/1/有沒有一種方法來優化此鍵碼列表功能?

$(document).keydown(function (e) { 
    if ($(e.target).is('input') || $(".answerbtns").length != 0) { return } 
    /* keyboard 1 */ 

    else if (e.keyCode == 97 || e.keyCode == 49) { 
     $("#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 2 */ 
    if (e.keyCode == 98 || e.keyCode == 50) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl01_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 3 */ 
    if (e.keyCode == 99 || e.keyCode == 51) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl02_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 4 */ 
    if (e.keyCode == 100 || e.keyCode == 52) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl03_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 5 */ 
    if (e.keyCode == 101 || e.keyCode == 53) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl04_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 6 */ 
    if (e.keyCode == 102 || e.keyCode == 54) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl05_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
    /* keyboard 7 */ 
    if (e.keyCode == 103 || e.keyCode == 55) { 
     $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl06_lbAnswers")[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
}); 
+2

當然,創建一個將鍵碼鏈接到目標元素的鍵碼映射,然後使用一個循環。或者使用對象鍵/值對。 –

+1

也許[代碼評論](http://codereview.stackexchange.com/)是一個更好的地方。 –

回答

6

肯定,創建地圖鏈接鍵碼到目標元素,然後使用一個循環鍵碼。或者使用對象鍵/值對。下面是他們兩個人的樣本:

var keys = { 
    97: "#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers", 
    49: "#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers" 
} 
$(document).keydown(function (e) { 
    if ($(e.target).is('input') || $(".answerbtns").length != 0) { return } 
    /* keyboard 1 */ 

    if (keys[e.keyCode]) { 
     $(keys[e.keyCode])[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
}); 

而且,如果它們都具有類 「answerbtns」,你可以這樣做:

var numeric = [97,98,99,100,101,102,103]; 
var numpad = [49,50,51,52,53,54,55]; 
$(document).keydown(function (e) { 
    if ($(e.target).is('input') || $(".answerbtns").length == 0) { return } 
    /* keyboard 1 */ 
    var index = $.inArray(e.which,numeric); 
    if (index == -1) { 
     index = $.inArray(e.which,numpad); 
    } 
    if (index != -1) { 
     $(".answerbtns")[index].click(); 
     e.stopPropagation(); 
     return false; 
    } 
}); 

http://jsfiddle.net/wAwed/2/

+0

這是一個自動生成的ID嗎?在JavaScript中硬編碼自動生成的ID是否安全?它當然不是非常維護友好。 –

+0

是的,它是自動生成的ID。我可以爲所有按鈕使用類名「answerbtns」,但是我必須使用索引來指定每個按鈕?我真的不知道如何實現它。 – user2734550

+0

是的,你會選擇他們全部,然後按索引篩選。對於按1,篩選到索引0,2是1等 –

0

此選項可減少一些代碼。

var custKeyCode = [97, 49, 98, 50]; 

if (e.keyCode == 97 || e.keyCode == 49) { 
    myid = "#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers"; 
} 

if (e.keyCode == 98 || e.keyCode == 50) { 
    myid = "#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl01_lbAnswers"; 
} 

...... 
...... 

for(var i=0; i<custKeyCode.length; i++){ 
    if(custKeyCode[i] == e.keyCode){ 
     $(myid)[0].click(); 
     e.stopPropagation(); 
     return false; 
    } 
} 
+0

您可以通過使用數組和搜索數組來縮短條件部分 –

+0

這對於執行'點擊'腳本的代碼很有用。 –

相關問題