Запуск события клавиатуры, событие клавиатуры WebKit не запускается - PullRequest
2 голосов
/ 20 июня 2010

У меня есть код javaScript, который прослушивает нажатую клавишу «return»,
работает во всех браузерах, кроме браузеров webkit .

Я знаю о последних изменениях веб-наборов в обработке событий клавиатуры .
Я не могу найти правильное решение в этом подробном описании .

вот код .

function addEventHandler(node,type,fn){
   if(typeof window.event !== "undefined"){
            /* Internet Explorer way */
            node.attachEvent( "on" + type, fn );
   } else {
           /* FF & Other Browsers */
           node.addEventListener( type, fn,false );
   }
} 


function detectSubmit(){
    searchTextInput = document.getElementById("txtSearch")
    addEventHandler(searchTextInput,"keydown",triggerSearch);
}

function triggerSearch(e){
  //getting the character that was pressed cross browser. 
     var key = e.keycode ? e.keycode : e.which;
  //detect if the return key was pressed. 
    if(key==13){
      alert("return clicked");
    }
}

   addEventHandler(window,"load",detectSubmit);

1 Ответ

2 голосов
/ 21 июня 2010

Наиболее очевидная вещь - это простая опечатка в следующей строке:

var key = e.keycode ? e.keycode : e.which;

Это должно быть keyCode, а не keycode.

Кроме этого, существуют проблемыв функции addEventHandler.Я предлагаю следующее:

function addEventHandler(node,type,fn){
    if (typeof node.addEventListener !== "undefined"){
        /* DOM-compliant method */
        node.addEventListener( type, fn,false );
    } else if (typeof node.attachEvent !== "undefined") {
        /* IE */
        node.attachEvent( "on" + type, fn );
    }
}

Две вещи: во-первых, лучше проверять attachEvent напрямую, чем делать вывод о его существовании из существования window.event.На самом деле, window.event существует в Safari и Chrome, но не (я думаю) attachEvent, так что хитрый вывод не позволяет вашему коду работать.

Во-вторых, лучше проверить стандарт DOM addEventListener сначала и используйте его там, где он есть, а не attachEvent.Опера, например, имеет оба, но только addEventListener стандартизировано.

...