Forma definitiva de acionar events keypress com jQuery

Li todas as respostas para essas perguntas e nenhuma das soluções parece funcionar.

Além disso, estou recebendo a vibração que triggersr keypress com caracteres especiais não funciona de todo. Alguém pode verificar quem fez isso?

Se você quiser acionar o evento keypress ou keydown, tudo o que você precisa fazer é:

var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value $("input").trigger(e); 

Um pouco mais conciso agora com o jQuery 1.6+ :

 var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } ); $('input').trigger(e); 

(Se você não estiver usando o jQuery UI, sub no keycode apropriado).

A resposta real deve include keyCode:

 var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value e.keyCode = 50 $("input").trigger(e); 

Mesmo que o site do jQuery diga que o que e o keyCode estão normalizados, eles estão muito enganados. É sempre mais seguro fazer as verificações padrão entre navegadores para e.which e e.keyCode e, nesse caso, basta definir as duas.

Se você estiver usando o jQuery UI também, você pode fazer assim:

 var e = jQuery.Event("keypress"); e.keyCode = $.ui.keyCode.ENTER; $("input").trigger(e); 

Ok, para mim que trabalhe com isso …

 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}]); 

Caso você precise levar em consideração a seleção atual de cursor e texto …

Isso não funcionou para mim para um aplicativo AngularJS no Chrome. Como Nadia aponta nos comentários originais, o personagem nunca é visível no campo de input (pelo menos, essa foi a minha experiência). Além disso, as soluções anteriores não levam em consideração a seleção de texto atual no campo de input. Eu tive que usar uma maravilhosa biblioteca de seleção de jquery .

Eu tenho um teclado numérico personalizado na canvas que preenche vários campos de input. Eu precisei…

  1. Em foco, salve o lastFocus.element
  2. No desfoque, salve a seleção de texto atual (iniciar e parar)

     var pos = element.selection('getPos') lastFocus.pos = { start: pos.start, end: pos.end} 
  3. Quando um botão no teclado do meu é pressionado:

     lastFocus.element.selection( 'setPos', lastFocus.pos) lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'}) 

Eu fiz isso funcionar com a chave.

 $("#id input").trigger('keyup'); 

console.log( String.fromCharCode(event.charCode) );

Não há necessidade de mapear o personagem, eu acho.

também pode ser realizado assim ( docs )

 $('input').trigger("keydown", {which: 50}); 

De você quer fazer isso em uma única linha você pode usar

 $("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) }));