Окончательный способ запуска событий нажатия клавиш с помощью jQuery
Я прочитал все ответы на эти вопросы, и ни одно из решений, похоже, не работает.
кроме того, я получаю вибрацию, что запуск нажатия клавиши со специальными символами вообще не работает. Может ли кто-нибудь проверить, кто это сделал?
10 ответов:
Если вы хотите, чтобы вызвать событие keydown или нажатие клавиши, то все, что вам нужно сделать, это:
var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value $("input").trigger(e);
теперь чуть более лаконично С jQuery 1.6+:
var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } ); $('input').trigger(e);
(Если вы не используете jQuery UI, sub в соответствующем коде ключа вместо этого.)
реальный ответ должен включать код:
var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value e.keyCode = 50 $("input").trigger(e);
несмотря на то, что сайт jQuery говорит, что и код ключа нормализованы, они очень сильно ошибаются. Всегда безопаснее делать стандартные кросс-браузерные проверки для e. which и e.keyCode, и в этом случае просто определите оба.
Если вы используете jQuery UI тоже, вы можете сделать так:
var e = jQuery.Event("keypress"); e.keyCode = $.ui.keyCode.ENTER; $("input").trigger(e);
хорошо, для меня это работа с этим...
var e2key = function(e) { if (!e) return ''; var event2key = { '96':'0', '97':'1', '98':'2', '99':'3', '100':'4', '101':'5', '102':'6', '103':'7', '104':'8', '105':'9', // Chiffres clavier num '48':'m0', '49':'m1', '50':'m2', '51':'m3', '52':'m4', '53':'m5', '54':'m6', '55':'m7', '56':'m8', '57':'m9', // Chiffres caracteres speciaux '65':'a', '66':'b', '67':'c', '68':'d', '69':'e', '70':'f', '71':'g', '72':'h', '73':'i', '74':'j', '75':'k', '76':'l', '77':'m', '78':'n', '79':'o', '80':'p', '81':'q', '82':'r', '83':'s', '84':'t', '85':'u', '86':'v', '87':'w', '88':'x', '89':'y', '90':'z', // Alphabet '37':'left', '39':'right', '38':'up', '40':'down', '13':'enter', '27':'esc', '32':'space', '107':'+', '109':'-', '33':'pageUp', '34':'pageDown' // KEYCODES }; return event2key[(e.which || e.keyCode)]; }; var page5Key = function(e, customKey) { if (e) e.preventDefault(); switch(e2key(customKey || e)) { case 'left': /*...*/ break; case 'right': /*...*/ break; } }; $(document).bind('keyup', page5Key); $(document).trigger('keyup', [{preventDefault:function(){},keyCode:37}]);
в случае, если вам нужно учитывать текущую позицию курсора и выделение текста...
это не работало для меня для приложения AngularJS на Chrome. Как указывает Надя в оригинальных комментариях, символ никогда не отображается в поле ввода (по крайней мере, это был мой опыт). Кроме того, предыдущие решения не учитывают текущее выделение текста в поле ввода. Я должен был использовать замечательную библиотеку jquery-selection.
у меня есть пользовательская экранная цифровая клавиатура, которая заполняет несколько полей ввода. Мне пришлось...
- при фокусировке сохраните последний фокус.элемент
при размытии сохраните текущее выделение текста (начало и остановка)
var pos = element.selection('getPos') lastFocus.pos = { start: pos.start, end: pos.end}
при нажатии кнопки на клавиатуре my:
lastFocus.element.selection( 'setPos', lastFocus.pos) lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})
это также может быть выполнено следующим образом ( docs)
$('input').trigger("keydown", {which: 50});