Імітуйте натискання клавіші за допомогою jQuery


79

Як я можу за допомогою jQuery імітувати (запускати?) Натискання клавіші при натисканні на посилання? Наприклад, коли користувач натискає таке посилання:

<a id="clickforspace" href="#">Click Here</a>

Тоді, натиснувши посилання, це було б так, ніби вони натиснули «пробіл» на своїй клавіатурі.

Щось подібне, я припускаю:

$("#clickforspace").click(function(e) { 
    e.preventDefault(); 
    //... Some type of code here to initiate "spacebar" //
                                      });

Будь-які ідеї щодо того, як цього досягти?


2
Це може відповісти на ваше запитання.
themis

Мені цікаво - при спробі замінити clickна пробіл, ви насправді хотіли, щоб браузер прокрутив сторінку вниз? Натискання пробілу на посиланні, як правило, має той самий ефект, що і натискання клавіші вниз сторінки.
Джоел Пурра,

Відповіді:


15

Подія натискання клавіші від jQuery призначена для виконання такої роботи. Ви можете викликати подію, передавши рядок "натискання клавіші" в .trigger (). Однак, якщо бути більш конкретним, ви можете фактично передати об'єкт jQuery.Event (вкажіть тип як "натискання клавіші") та надати будь-які властивості, які вам потрібні, наприклад, код клавіші - пробіл.

http://docs.jquery.com/Events/trigger#eventdata

Прочитайте вищезазначену документацію, щоб дізнатися більше.


54
Звичайно, прочитайте документацію, але плакат, мабуть, це вже знав. Документація подій jQuery трохи непрозора. Ендрю Калвер дав пряму відповідь, плюс посилання для отримання додаткової інформації.
Рой Лебан,

142

Я вважаю, що це те, що ви шукаєте:

var press = jQuery.Event("keypress");
press.ctrlKey = false;
press.which = 40;
$("whatever").trigger(press);

Від сюди .


17
Це не дасть жодного фактичного тексту, якщо його використовувати, наприклад, з контролем введення.
Алекс Бурцев

5
@AlexBurtsev - Ви маєте рацію, тому що це лише запускає обробник події так, ніби була натиснута конкретна клавіша, але насправді не натискає цю клавішу, як це відбувається при натисканні клавіші на клавіатурі (можливо, з міркувань безпеки)
BornToCode

6
Чи є причина, чому ви змішуєте '$' та 'jQuery'?
Денні Ендрюс,

4
Те, що ви написали, не працювало для мене в jQuery 2.2.3 на Chrome. :( Але це сталося:$("whatever").trigger($.Event("keydown", {keyCode: 40}))
Джонатан Бенн,

1
Спираючись на метод Джонатана Бенна, ви також можете використовувати ту саму техніку для надсилання ключа, а не надсилання коду ключа (оскільки коди ключів позначені як застарілі). Наприклад: $ ("what"). Trigger ($. Event ("keyup", {key: "Enter"})) - і за бажанням, як показано, з різними подіями клавіатури.
Алан М.


12

Ви можете спробувати цей плагін SendKeys jQuery:

http://bililite.com/blog/2011/01/23/improved-sendkeys/

$(element).sendkeys(string)вставляє рядок у точці вставки у вхід, текстове поле або інший елемент із contenteditable = true. Якщо точка вставки в даний час відсутня в елементі, вона запам'ятовує, де була точка вставки, коли востаннє викликали sendkeys (якщо точка вставки ніколи не була в елементі, вона додається до кінця).


Вам не потрібен jQuery, щоб використовувати це, ви можете використовувати ту саму функціональність, просто отримавши bililiteRangeбібліотеку: github.com/dwachss/bililiteRange (насправді плагін jQuery - це просто тонка обгортка навколо цієї неймовірної бібліотеки, яка є самостійною ).
fiatjaf

5

Це працює:

var event = jQuery.Event('keypress');
event.which = 13; 
event.keyCode = 13; //keycode to trigger this for simulating enter
jQuery(this).trigger(event); 

1
[var event = jQuery.Event ('натискання клавіші'); event.which = 13; event.keyCode = 13; jQuery (this) .trigger (event);] спробуйте це
Anoop PS

Мені потрібно було натиснути клавішу Enter у діалоговому вікні, тож із фрагментом тут я замінив це на #myEl .. дякую
Gene Bo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.