Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2013, 00:50
Новичок на форуме
Отправить личное сообщение для antre Посмотреть профиль Найти все сообщения от antre
 
Регистрация: 25.04.2013
Сообщений: 5

Эмуляция нажатия клавиш в 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 уже не работает?
Спасибо.

ЗЫ: фокусом ввода я называю такую рамочку из точек, указывающую какой элемент сейчас выбран

Последний раз редактировалось antre, 27.04.2013 в 00:54.
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2013, 04:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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 - то есть это уж тем более не повлечет каких-либо действий браузера )
Ответить с цитированием
  #3 (permalink)  
Старый 27.04.2013, 09:23
Новичок на форуме
Отправить личное сообщение для antre Посмотреть профиль Найти все сообщения от antre
 
Регистрация: 25.04.2013
Сообщений: 5

спасибо) буду знать
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2017, 03:53
Новичок на форуме
Отправить личное сообщение для lol-kek Посмотреть профиль Найти все сообщения от lol-kek
 
Регистрация: 10.03.2017
Сообщений: 1

это конечно не 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>

Последний раз редактировалось lol-kek, 10.03.2017 в 04:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка нажатия двух клавиш 12345678 Events/DOM/Window 1 15.01.2013 13:41
Можно ли посылать нажатия клавиш контролу? Vornic Элементы интерфейса 1 21.12.2012 05:54
идентификация одновременного нажатия 2-х и более клавиш Раед Events/DOM/Window 3 18.03.2012 11:37
Отслеживание нажатия комбинации клавиш MCTrane Общие вопросы Javascript 10 06.02.2011 06:04
эмуляция нажатия клавиш jetli13 Общие вопросы Javascript 4 24.09.2010 11:08