2008-10-03 3 views
4

Ctrl + N을 다른 동작으로 다시 매핑하려는 웹 페이지가 있습니다. 나는 YUI의 Key Listener 등록 예제를 따랐다. 그리고 함수는 호출되었지만 Firefox는 여전히 새로운 브라우저 창을 생성한다. 상황은 IE7에서 정상적으로 작동하는 것 같습니다. 새 창이 나타나지 않게하려면 어떻게합니까?YUI의 키 수신기에서 기본 동작 방지

예 :

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, 
      {fn:function(event) { 
        YAHOO.util.Event.stopEvent(event); // Doesn't help 
        alert('Click');}}); 
kl2.enable(); 

그것은 기본 동작을 제거 할 수있다. Google 문서 도구는 Firefox의 저장 대화 상자를 표시하는 대신 Ctrl + S를 재정 의하여 문서를 저장합니다. Ctrl + S로 위의 예제를 시도했지만 Firefox의 저장 대화 상자가 계속 나타납니다. Google에서 저장 대화 상자가 표시되지 않게 할 수 있으므로 대부분의 기본 키보드 단축키가 표시되지 않도록 할 수 있습니다.

답변

7

비결은 'fn을'기능 것은 꽝이다.

실험적으로 fn의 함수 유형이 두 개의 매개 변수를 사용한다는 것을 알 수 있습니다. 첫 x 째 매개 변수는 실제로 이벤트의 TYPE을 포함합니다. 두 번째는 포함 ... 그리고이 터져입니다 :

: 인덱스 1

그래서 약간의 주위에 당신의 코드를 변경, 그것은 다음과 같아야에서 인덱스 0의 코드 포인트와 실제 이벤트 객체를 포함하는 배열

function callback(type, args) 
{ 
    var event = args[1]; // the actual event object 
    alert('Click'); 

    // like stopEvent, but the event still propogates to other YUI handlers 
    YAHOO.util.Event.preventDefault(event); 
} 
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback}); 
kl2.enable(); 

또한 lisp을 좋아하기 때문에 코드에 원시 코드 포인트를 사용하지 마십시오. "78"대신에 'N'.charCodeAt (0)을 사용하십시오. 또는 함수로 포장하십시오.

function ord(char) 
{ 
    return char.charCodeAt(0); 
} 
0

나는 단지 여기에서 추측하고있다. 그러나 나는 그것이 할 수 있다고 생각하지 않는다.

가능하면 가능하지 않아야합니다. 일반적인 키보드 단축키는 혼란스럽지 않아야합니다. 무엇 향후 계획? 대부분의 사용자가 특정 일에 일을하는 키 누름에 사용되기 때문에, 그러나

: 당신이 시도 할 수, util을 YUI의 이벤트를 사용하여 새 창을 열려면 창 닫기 버튼 ...

+0

가능합니다. Google 문서 도구를 사용해보십시오. 페이지를 저장하는 대신 Ctrl + S를 재정 의하여 문서를 저장합니다. Ctrl + S를 테스트로 덮어 쓰려고 시도하고 저장 대화 상자가 나타납니다. – Cristian

+0

그것은 수치 스럽습니다. 이 경우 Google 기능이 좋지 않다고 말하는 것은 아니지만 기본 바로 가기 기능을 사용한다고 생각하지 않습니다. – Gene

0

후크와 stopEvent 방법을 사용 브라우저 (귀하의 예에서는 새 창), 나는 항상 충돌을 피하는데, 이는 사실상 메타 또는 제어 키를 사용하지 않음을 의미합니다.

나는 텍스트 입력 상자가있을 때까지는 글자 만 사용하기 때문에이 조언이 도움이되지 않을 수 있습니다.