Definitive way to trigger keypress events with jQuery
我已经阅读了关于这些问题的所有答案,但没有一个解决方案似乎有效。
此外,我正在获得触发按键的特殊字符的氛围根本不起作用。 有人可以验证谁做了这个吗?
如果你想触发按键或keydown事件,那么你所要做的就是:
1 2 3 | var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value $("input").trigger(e); |
使用jQuery 1.6+稍微简洁一点:
1 2 3 | var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } ); $('input').trigger(e); |
(如果您没有使用jQuery UI,请改为使用相应的键代码。)
真正的答案必须包括keyCode:
1 2 3 4 | var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value e.keyCode = 50 $("input").trigger(e); |
即使jQuery的网站说哪个和keyCode正常化,他们也是非常错误的。对e.which和e.keyCode进行标准的跨浏览器检查总是最安全的,在这种情况下只需定义两者。
如果你也在使用jQuery UI,你可以这样做:
1 2 3 | var e = jQuery.Event("keypress"); e.keyCode = $.ui.keyCode.ENTER; $("input").trigger(e); |
我用keyup工作了。
1 | $("#id input").trigger('keyup'); |
好吧,对我来说,这个...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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}]); |
你想在一行中做到这一点你可以使用
1 | $("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) })); |
如果您需要考虑当前光标和文本选择...
这对我来说不适用于Chrome上的AngularJS应用。正如Nadia在原始评论中指出的那样,这个角色在输入字段中永远不可见(至少,这是我的经验)。此外,先前的解决方案没有考虑输入字段中的当前文本选择。我不得不使用一个很棒的库jquery选择。
我有一个自定义的屏幕数字小键盘,可以填充多个输入字段。我不得不...
在模糊时,保存当前文本选择(开始和停止)
1 2 | var pos = element.selection('getPos') lastFocus.pos = { start: pos.start, end: pos.end} |
按下键盘上的按钮时:
1 2 | lastFocus.element.selection( 'setPos', lastFocus.pos) lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'}) |
它可以像这个文档一样完成
1 | $('input').trigger("keydown", {which: 50}); |
我猜不需要映射字符。