2014-02-07 6 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

[Code Review] (http://codereview.stackexchange.com/)가 더 좋은 곳입니다. –

답변

6

확신, 다음 루프를 사용하여 대상 요소에 키 코드를 연결 키 코드의지도를 만들 수 있습니다. 또는 객체 키/값 쌍을 사용하십시오. 여기에 두 가지의 샘플입니다 : 그들은 모두 클래스 "answerbtns"이 경우,

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

을, 당신은이 작업을 수행 할 수 있습니다

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입니까? 자바 스크립트에서 자동 생성 된 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

'클릭'스크립트가 실행되는 코드에 유용합니다. –