2011-01-18 4 views
2

jresig의 jquery 단축키를 사용하고 있는데 단축키 하나로 작동하는 것처럼 보입니다. 문제는 데이터베이스에서 단축키 목록을 가지고 있으며이를 읽고 단축키를 동적으로 할당하려고합니다. 그래서 나는 바로 가기 키 및 값의 목록을 가지고이 내 JS입니다 :동적으로 바인딩하는 jquery 단축키

이제 어떻게 내가 키를 누를 때마다, 그것은 그냥 바인딩 마지막 단축키를 경고하는 것이 무엇
$(document).ready(function() { 
    var keyList = []; 

    $('.hotkey').each(function(){ 
    hotkey = $(this).attr('value'); 
    hotkey = hotkey.substring(1,hotkey.length-1); 

    myVal = $(this).next().attr('value'); 

    alert("binding " + hotkey); 

    $(document).bind('keydown', hotkey, function() { 
     alert("YOU PRESSED " + hotkey); 
     $('.chosen-category-id').attr('value', hotkey); 
     $('.chosen-category-name').attr('value', myVal); 
    }); 

    }) 
}) 

. 여기 논리에 문제가 있습니까? 나는 엄청나게 많은 문서를 붙여 넣기하는 것으로부터 자신을 지키고있다. 나는 이것을 동적으로하려고 노력하고있다. 이 작품과 다른하지 않는 이유에

$(document).ready(function() { 

    var keyList = []; 
    var keyValues = []; 

    $('.hotkey').each(function(){ 
    hotkey = $(this).attr('value'); 
    hotkey = hotkey.substring(1,hotkey.length-1); 

    keyList.push(hotkey); 

    keyValues.push($(this).next().attr('value')) ; 
    }) 


    $.each(
    keyList, 
    function(index, key) { 
     $(document).bind('keydown', key, function() { 
     alert("O HAI YOU PRESSED " + key); 
     $('.chosen-category-id').attr('value', key); 
     $('.chosen-category-name').attr('value', keyValues[index]); 
     return false; 
     }); 
    } 
) 


}) 

지금 작동하지만 호기심 메신저 :

편집

나는 나의이와 코드를 리팩토링. 바로 가기 키 변수가 마지막 반복을 계속 덮어 씁니까? 또한 첫 번째 코드는 두 번째 코드가 두 번 수행되는 동안 하나의 루프 만 수행하므로 더 효율적으로 보입니다.

+0

마크 업을 게시해도 좋습니까? 가급적 jsfiddle.net에? – Dogbert

+0

마크 업에 대해 알아야 할 사항은 무엇입니까? 그들은 클래스 핫키와 함께 입력 버튼과 "(단축키)"형식의 값을 많이 가지고 있습니다. 또한 질문을 편집했습니다. – corroded

+0

그런데 저 커크처럼 들리는 것은 아닙니다. 나는 마크 업이 올바른 값을 얻는 것과 관련이 없다고 생각합니다. 문제는 바인딩의 할당이었습니다. – corroded

답변

0

비슷한 문제가있었습니다. 나는이 있었다 :

$(document).bind('keypress', keyBinding, function(e) { 
    e.preventDefault(); 
    $(this).trigger("click"); 
}); 

을하지만, 예제의 일부를 읽은 후 나는 것을 변경 : 그냥 키 바인딩의 VAR을 할당 당신과 같은 각 루프 내부/이들의

$(document).bind('keydown', keyBinding, function(e) { 
    $(this).trigger("click"); 
    return false; 
}); 

모두가 있었다 'Ctrl + s'또는 'Ctrl + 오른쪽'과 같은 항목으로 이동하십시오. 재미있는 부분은 분명히 "keypress"및 "false false"입니다. 나는 지금 완벽하게 잘 작동한다. 내가 가지고있는 첫 번째 코드는 모든 브라우저 (크롬)에서 작동하지 않았지만 FF로 작동했습니다.

내가 배운 다른 재미있는 이야기는 당신이 바인딩에주의해야한다는 것입니다. 일부 바인딩은 모든 브라우저에서 작동하지 않습니다. Ctrl + n은 예를 들어 Chrome (다른 사용자)에서 작동하지 않습니다. github site에 테스트 페이지가 포함되어 있습니다. 나는 지역 개발 사이트에서 일하기 위해 그들 중 하나를 개장 했으므로 페이지에서 효과가 있고 의미있는 것을 발견 할 때까지 키 콤보를 테스트 할 수있었습니다.