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

我也感觉到用特殊字符触发按键根本不起作用。有人可以验证谁做了这个吗?

评论

不,您会想念这个概念的。这不是应该如何工作的。触发器将仅调用事件处理程序。它实际上不会打印密钥。如果要模拟打印键的效果,只需将键添加到输入值并同时触发事件。

有趣的是,我不知道。在这种情况下,您能告诉我触发事件是否也会为非jquery库触发吗?例如,如果我在纯JS中设置了onKeydown,它将捕获我的“假”事件吗?

是的,如果在纯js中设置了onkeydown ='...'。它将由假事件触发。我不确定。但是我做了一个快速测试,就可以了。

@Nadia谢谢!我已经读完所有答案,想知道为什么事情在我的期望不正确之前就无法正常工作。我怀疑很多其他人也会有同样的误解。

两年后...阅读该页面,似乎确定的方法是:$('input#search')。trigger($。Event('keydown',{which:$。ui.keyCode.ENTER,keyCode:$ .ui.keyCode.ENTER}));

#1 楼

如果要触发按键或按键事件,那么您要做的就是:

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


评论


问题是如何触发,而不是如何捕获

–乍得格兰特
09年5月6日在22:48

我添加了触发事件的示例

– Nadia Alramli
09年5月6日23:05

很好的答案。值得注意的是,jQuery.Event可用于jQuery 1.3或更高版本。在以下问题中变得相关:stackoverflow.com/questions/1823617/…

– artlung
09年12月1日下午3:07

这不适用于jQuery UI滑块。我必须像下面的OreiA的回答一样设置e.keyCode。

–crizCraig
2011年2月5日在20:35

首先,我在应用程序中使用“ keyup”获得了更大的成功

–mark
2013年1月9日21:30

#2 楼

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

评论


只需记住还要用“哪个”替换“ keyCode”。

–Richard Nienaber
2012年4月4日21:25



是的,您必须定义哪个和keyCode才是安全的(如果事件侦听器检查e.keyCode,则仅当您在创建jQuery.Event对象时定义keyCode时,它才起作用)

– jackocnr
13年6月26日在21:54

jQuery规范化了哪个/ keyCode,因此将两者都放入。

–奈杰尔·安吉尔(Nigel Angel)
13年7月8日在14:12

+1:指向api.jquery.com的链接;和当前的jQuery版本无法规范化哪个代码/键代码,因此为了安全起见,您应该同时提供

–维克多
2014年6月12日7:58

@SamuelLindblom我应该写得更清楚一些:jQuery不规范通过.trigger(jQuery.Event('name',props))传递的事件属性。看示例jsfiddle.net/9ggmrbpd/1-触发事件的属性按原样传递。源代码:github.com/jquery/jquery/blob/master/src/event.js#L739

–维克多
2015年9月24日在9:20



#3 楼

真正的答案必须包括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进行标准的跨浏览器检查总是最安全的,在这种情况下,只需定义两者即可。

评论


+1。顺便说一句,e.keyCode = e.which = 50;在一行中会更好。 :)

– Sk8erPeter
2012年11月11日13:13



我只是发现仅使用keyCode不起作用。必须设置两者才能使其正常工作

– Tasos K.
14-10-31在16:11



@ Sk8erPeter除非是golph编码竞赛,否则不会

– shabunc
18-2-4在19:08



#4 楼

如果您也使用jQuery UI,则可以这样:

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


评论


e。似乎与我的jQuery UI滑块不兼容。感谢您的回答。确实有效。

–crizCraig
2011-2-5 20:29

#5 楼

我通过keyup使其工作。

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


评论


在6年前的问题中,我也想设置代码,但不知道如何。

–koryak
15年5月15日在18:52

#6 楼

好的,对我来说,可以使用此功能...

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


#7 楼

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

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

我有一个自定义的屏幕数字小键盘,可以填充多个输入字段。我必须...


重点,保存lastFocus.element

模糊时,保存当前文本选择(开始和停止) >
var pos = element.selection('getPos')
lastFocus.pos = { start: pos.start, end: pos.end}



按下键盘上的按钮时:

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




#8 楼

您想单行执行此操作,就可以使用

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


#9 楼

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

我想不需要映射字符。

#10 楼

可以像docs

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

这样完成

评论


这似乎不起作用,因为它使用了extraParameters参数,该参数未在事件参数内设置任何内容,而是向事件处理程序回调中添加了额外的参数。

– TimeWaster
16年6月6日在16:08

不是有效的解决方案

– Entwickler
16年3月3日在15:10