Эмуляция нажатия клавиш в body на jq
Есть в документации на jq такая тема: http://api.jquery.com/category/events/event-object/
Исходя из которой следующая минидемка должна работать (нужно сэмулировать нажатие клавиши "таб", что бы установить фокус ввода на ссылку а, затем сэмулировать нажатие ентера) <!DOCTYPE html> <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> function press(){ var e = jQuery.Event("keydown", { keyCode: 9 }); //tab jQuery("body").trigger(e); var e = jQuery.Event("keydown", { keyCode: 13 }); //enter jQuery("body").trigger(e); } </script> </head> <body> <a href="http://google.com">google</a> <form> <input type=button value="Нажать" onClick="press()"> </form> </body> </html> Проверил в браузерах ff, chrome, под линухой и виндой, и ИЕ - ни где фокус ввода не устанавливается:( версия jq последняя, пробовал нажимать таб по несколько раз. Если юзать некроссбраузерный msdn-овский метод чисто для IE - всё ок, но не устраивает, нужен вебкит. Где я налажал в коде? Или это бага? Или браузеры резко повысили безопасность и часть jq уже не работает? Спасибо. ЗЫ: фокусом ввода я называю такую рамочку из точек, указывающую какой элемент сейчас выбран |
1) Программно вызванные события не влекут за собой действия по умолчанию. Это значит что если вызвать клик по ссылке - перехода не будет. И если вызвать событие keypress, то символ не напечатается. И это не бага, это - стандарт.
2) Сомневаюсь что jquery вызывает dispatchEvent. Впрочем можно затестить: <script src="//code.jquery.com/jquery-latest.js"></script> <script> document.addEventListener('keydown', function() { alert('Element.addEventListener'); }); $(document).keydown(function(){ alert('jQuery.keydown'); }); var e = jQuery.Event("keydown", { keyCode: 9 }); $(document).trigger(e); </script> Как видим, метод trigger всего лишь вызывает обработчики, навешанные через jQuery - то есть это уж тем более не повлечет каких-либо действий браузера :)) |
спасибо) буду знать
|
это конечно не Tab►Enter, но можно использовать подобным образом
работает в Хроме и Мозилле <body> <a href="http://habrahabr.ru/post/114244/" id="element_id">banana</a> </body> <script> var element = document.getElementById('element_id'); if(document.createEvent) { var o = document.createEvent('MouseEvents'); o.initEvent('click', true, false ); element.dispatchEvent(o); } else if( document.createEventObject ) { o.fireEvent('click'); } </script> |
Часовой пояс GMT +3, время: 18:58. |