"Залипание" onkeydown()
Недавно столкнулся с проблемой: мне всего-то нужно было сделать обработчик на прижатую клавишу клавиатуры. Немного подумав, сделал для этого обработку события onkeydown(). Все было замечательно, пока я не подержал в нажатом состоянии клавишу с привязанным к ней обработчиком некоторое время... и каково же было мое удивление, когда функция-обработчик стала вызываться снова, снова и снова... :blink: Сначала подумал, что это виновата новая Opera, но после проверки других браузеров понял, что однократно onkeydown() срабатывает только в старой Opera 9.62 и Iceweasel 3.0.6. Во всех остальных (FireFox 3.6.6, Google Chrome 5.0, Safari 5.0, IE 8) обработчик почему-то "залипает" :(
Может, кто-нибудь объяснит нубу, как сделать, чтобы функция-обработчик вызывалась однократно? Вот мой код на jQuery: ( Кликните по фрейму и попробуйте нажать и держать клавишу [t], и увидите, как будет непрерывно меняться содержимое div с id = "test" ) <!-- Подключаем библиотеку jQuery: --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type='text/javascript'> $( document ).ready( function(){ $( document ).keydown( function( e ){ if( e.keyCode == 84 ) // Если была прижата клавиша "t": $( "#test" ).html( Math.random() ); } ); } ); </script> <div id = "test"></div> |
Если только отслеживать ещё и keyup. Один раз обработчик вызвали, пока не будет keyup, больше его не вызываем.
|
Цитата:
Вообщем, этот код работает во всех браузерах, перечисленных мной в первом посте, исключая новую Opera: <!-- Подключаем библиотеку jQuery: --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type='text/javascript'> $( document ).ready( function(){ // Переменная-флажок: true - keyup() сработал, // false - еще нет: *!*var flag = true;*/!* $( document ).keydown( function( e ){ if( e.keyCode == 84 *!*&& flag*/!* ){ // Если была прижата клавиша "t": $( "#test" ).html( 'keydown сработал! ' + Math.random() ); *!*flag = false;*/!* } } ); $( document ).keyup( function( e ){ if( e.keyCode == 84 ){ // Если была отжата клавиша "t": $( "#test2" ).html( 'keyup сработал! ' + Math.random() ); *!*flag = true;*/!* } } ); } ); </script> <div id = "test" style = "color: red"></div> <div id = "test2" style = "color: blue"></div> Моя Opera 10.60 (под linux) в этом примере делает "залипание" как для события onkeydown(), так и для onkeyup(), что делает использование переменной flag бессмысленным. Но почему это происходит? И можно ли как-нибудь решить эту проблему? :) |
а у меня работает в Opera 10.60 (под linux) нормально, точно также как и в FF
|
Цитата:
|
Часовой пояс GMT +3, время: 15:21. |