274

我已经阅读了这个问题的所有答案,但似乎没有一个解决方案有效。

另外,我感觉用特殊字符触发按键根本不起作用。有人可以验证谁做了这件事吗?

4

10 回答 10

378

如果你想触发 keypress 或 keydown 事件,那么你所要做的就是:

var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);
于 2009-05-06T22:31:14.660 回答
86

现在使用 jQuery 1.6+更加简洁:

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

$('input').trigger(e);

(如果您不使用 jQuery UI,请改为使用相应的键码。)

于 2011-10-28T02:23:12.460 回答
72

真正的答案必须包括 keyCode:

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

尽管 jQuery 的网站说 which 和 keyCode 是标准化的,但它们是非常严重的错误。对 e.which 和 e.keyCode 进行标准的跨浏览器检查总是最安全的,在这种情况下,只需定义两者。

于 2012-01-01T08:02:54.233 回答
18

如果你也在使用 jQuery UI,你可以这样做:

var e = jQuery.Event("keypress");
e.keyCode = $.ui.keyCode.ENTER;
$("input").trigger(e);
于 2010-07-30T08:20:51.470 回答
7

我使它与keyup一起工作。

$("#id input").trigger('keyup');
于 2015-05-15T14:49:31.487 回答
4

好的,对我来说,这个工作......

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}]); 
于 2010-12-15T17:11:14.557 回答
3

您想在一行中执行此操作,您可以使用

$("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) }));
于 2017-10-17T09:58:59.560 回答
2

如果您需要考虑当前光标和文本选择...

这不适用于 Chrome 上的 AngularJS 应用程序。正如 Nadia 在原始评论中指出的那样,该字符在输入字段中永远不可见(至少,这是我的经验)。此外,之前的解决方案没有考虑输入字段中当前的文本选择。我不得不使用一个很棒的库jquery-selection

我有一个自定义的屏幕数字键盘,可以填写多个输入字段。我不得不...

  1. 在焦点上,保存 lastFocus.element
  2. 在模糊时,保存当前的文本选择(开始和停止)

    var pos = element.selection('getPos')
    lastFocus.pos = { start: pos.start, end: pos.end}
    
  3. 当按下我的键盘上的按钮时:

    lastFocus.element.selection( 'setPos', lastFocus.pos)
    lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})
    
于 2015-02-04T06:12:21.920 回答
1

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

我猜不需要映射字符。

于 2013-04-26T23:41:59.450 回答
1

它可以像这个文档一样完成

$('input').trigger("keydown", {which: 50});
于 2016-01-02T07:53:07.953 回答