使用 jQuery 触发按键事件的最终方法

IT技术 javascript jquery events triggers keypress
2021-01-20 12:19:10

我已阅读有关此问题的所有答案,但似乎没有任何解决方案有效。

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

6个回答

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

var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);
这对我使用 jQuery UI 滑块不起作用。我必须像下面的 OreiA 的回答一样设置 e.keyCode。
2021-03-18 12:19:10
fwiw,我的应用程序使用“keyup”取得了更大的成功
2021-03-21 12:19:10
问题是如何触发,而不是如何捕捉
2021-03-23 12:19:10
非常好的答案。值得注意的是 jQuery.Event 可用于 jQuery 1.3 或更高版本。它与这个问题相关:stackoverflow.com/questions/1823617/...
2021-04-02 12:19:10
我添加了一个触发事件的例子
2021-04-06 12:19:10

现在使用 jQuery 1.6+更加简洁

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

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

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

请记住将“keyCode”替换为“which”。
2021-03-10 12:19:10
jQuery 将 which/keyCode 标准化,因此将其中一个放入应该可以同时进行。
2021-03-26 12:19:10
是的,您必须定义 which 和 keyCode 是安全的(如果事件侦听器检查 e.keyCode,则仅当您在创建 jQuery.Event 对象时定义 keyCode 时它才会起作用)
2021-04-06 12:19:10
+1 指向 api.jquery.com 的链接;和当前的 jQuery 版本不规范 which/keyCode,因此您应该提供两者以确保安全
2021-04-08 12:19:10
@SamuelLindblom 我应该写得更清楚:jQuery 不会规范化通过.trigger(jQuery.Event('name', props)). 查看示例jsfiddle.net/9ggmrbpd/1 - 触发事件的属性按原样传递。源代码:github.com/jquery/jquery/blob/master/src/event.js#L739
2021-04-08 12:19:10

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

@Sk8erPeter 除非是一场高尔夫编码比赛,否则不会
2021-03-12 12:19:10
我刚刚发现使用 onlykeyCode不起作用。必须同时设置两者才能使其工作
2021-03-16 12:19:10
+1。顺便说一句,e.keyCode = e.which = 50;在一行中会更好。:)
2021-03-29 12:19:10

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

var e = jQuery.Event("keypress");
e.keyCode = $.ui.keyCode.ENTER;
$("input").trigger(e);
e.which 似乎不适用于我的 jQuery UI 滑块。感谢您的回答。它确实有效。
2021-03-18 12:19:10

我让它与 keyup 一起工作。

$("#id input").trigger('keyup');
在我 6 年前的问题中,我也想设置键码,但不知道如何设置。
2021-03-29 12:19:10