Имитация нажатия на клавишу
В общем нужно сэмулирвоать нажатие клавиши, начал искать, нашел такой код на jq:
<script src='http://code.jquery.com/jquery-1.7.2.js'></script> <body onkeyup='a(event)'> <script> var e = jQuery.Event("keyup", { keyCode: 64 }); // trigger an artificial keydown event with keyCode 64 jQuery("body").trigger( e ); function a(event) { alert(event.keyCode) } </script> Как видите работает. Посмотрел в jq не нашел ф-ии Event, может кто знает как она устроена? Или хотя бы на словах объясните. |
пишет в объект события нужный keyCode? )
|
nerv_,
спасибо !areyoukiddingme! Я имею ввиду внутренности. Я просто принципиально не хочу юзать jq. Хочу на чистом писать. Вот так :) |
Цитата:
http://api.jquery.com/category/events/event-object/ В конце концов, залезь в код и посмотри. Он же открыт. |
nerv_,
Цитата:
|
9xakep, открываешь http://code.jquery.com/jquery-1.7.2.js и вставляешь эту строку
jQuery.Event = в поиск. Поиск с учетом регистра. |
nerv_,
А я искал: Event с учетом регистра) Спасибо, надеюсь пойму как устроено) |
Цитата:
Они наверно просто выполнили функцию |
9xakep,
я поискал =); jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; function returnFalse() { return false; } function returnTrue() { return true; } |
Я тоже не совсем понял, о какой имитации нажатия на клавишу идёт речь.
Обычно нажатие приводит к появлению символа или выполнению каких-либо действий, которые с этим нажатием связали: что нужно имитировать появление символа (здесь можно обойтись и без нажатия) или выполнение обработчика нажатия на эту клавишу (здесь можно вызывать код обработчика). Пример (не совсем по теме:) ) <input id="inp" type="button" value="click"> <script> window.onload = function () { var inp = document.getElementById('inp'); inp.onclick = function () { inp.value = String.fromCharCode(72, 69, 76, 76); setTimeout(function () {inp.value += String.fromCharCode(79)}, 2000) } } </script> |
bes,
O_o...ась? Мне нужно было именно нажатие на клавишу, просто было написано по-дурацки, и принажатии на клавишу вызывалась ф-ия и происходила рекусрия. Что бы ее не произошло, нужно было сразу же сэмулировать нажатие на клавишу (не будешь же юзеру каждый раз говорить, сейчас нажми на любую кнопку) Но я уже переделал, и обошолся без этого :) Dim@, отлично, а теперь найди: jQuery.expando,jQuery.extend, и trigger ;) Цитата:
|
Цитата:
Что такое иммитация нажатия на клавишу? По моему это так должно действовать-если у нас курсор на элементе input и у input focus то при иммитации нажатия клавиши там должна буква появится-точно так как будто юзер нажал-но в Вашем примере не появится только обработчик сработает |
Цитата:
Не? |
Раед,
ctrl+F *trololo* в любом браузере. Просто в jQuery.expand, есть еще 100500 ф-ий, итд. Так что легче переделать код. |
Цитата:
MDNsearch: createEvent, dispatchEvent |
Раед,
уже подсказали. Только вот не догоняю: createElement("Event") - тут какой событие писать для: keyup?? <body onkeyup='a(event)'><div id='a'></div> <script> var evt = document.createEvent("Event") evt.initEvent("keyup", true, true) evt.keyCode = 13 // Enter, можно так писать? document.dispatchEvent(evt) function a(e) { alert(e.keyCode) } </script> Но как видишь не работает... ===================== И попутный вопрос, event в firefox выдает undefined. Как ее там использовать, я уже за день как-то запутался, то работает, то пару строк уберу не работают.. :blink: ================= ![]() event снова работает в firefox!!!! |
<body><div id='a'></div> <script> var evt = document.createEvent("Event") evt.initEvent("keyup", true, true) evt.keyCode = 13 // Enter, можно так писать? Да function a(e) { alert(e.keyCode) } document.onkeyup = a;//функция пр нажатии клавиши document.dispatchEvent(evt)//срабатывание </script> :D :D :D работает |
9xakep,
не ставь больше на боди :lol: |
Dim@,
Спасибо О_о... ![]() |
9xakep,
щас создаю свой фреймворк хочу сделать что-то наподобии Jquery.Event (как ты хочу писать на чистом и не приемлю библиотеки, но считаю что работать со своим фреймворком можно, плюс мне интересно его писать) |
9xakep,
ага, незачто (плюс мне плюс :lol: :lol: - шутка) =========================== :D :D :D :D :D это моё 228 сообщение:dance: :dance: |
Цитата:
|
Drimogemon,
ты это к чему? просто в рунете 228 известно как статья педобира |
Вот ещё нашёл http://habrahabr.ru/post/114244/
|
Раед,
Спасибо, добавил в закладки) :) |
Вот код эмуляции, он заточенный под FF, надо лишь добавить немного кроссбраузерноститебе. :)
function fire(){ var press=new KeyboardEvent("keypress",{ key:"a", bubbles:true, cancelable:true, isTrusted:true, keyCode:0, charCode:97, wich:97, view:window, }) document.body.dispatchEvent(press) } document.body.addEventListener("keypress",function(event){ alert("Вы нажали "+event.key); },false); fire(); |
Часовой пояс GMT +3, время: 23:26. |