Эмуляция нажатия клавиш в 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, время: 02:00. |