我不是在寻找如何触发事件,我正在寻找如何模拟按键操作的方法。
我正在寻找行动而非事件......
此代码对我不起作用:
element.trigger('focus').trigger({ type : 'keydown', which : 50 })
因为当用户在输入中输入更多内容时,例如事件(keypress,keyup,keydown),字符输入到输入中,一些DOM事件被触发等。
使用此代码:
element.trigger({ type : 'keydown', which : 50 })
输入保持为空。我知道我可以使用:
element.trigger({ type : 'keydown', which : 50 }).val(2);
但我正在寻找更完整的解决方案,如果可能的话,模拟行动。
有什么建议吗?
答案 0 :(得分:0)
jQuery为此提供了内置解决方案。
$( "#target" ).keypress();
$( "#target" ).keypress(function() {
console.log( "Handler for .keypress() called." );
});
$('#target').keyup();
$('#target').keyup(function() {
console.log( "Handler for .keyup() called." );
});
$('#target').keydown();
$('#target').keydown(function() {
console.log( "Handler for .keydown() called." );
});
修改强>
所以你试图列出事件监听器?见Get event listeners attached to node using addEventListener
获取附加到节点的所有事件侦听器列表的唯一方法 是拦截听众附件呼叫。
答案 1 :(得分:0)
我想你想模拟特定keyPress事件的事件。
在这种情况下,您可以使用jQuery jQuery.Event Constructor
我希望你试图模拟2号键。在这种情况下,您可以这样做:
var e = jQuery.Event( "keypress" );
e.which = 50;
$("#some_element").trigger( e );
编辑:我只是想帮忙。 如果您想在该事件之后生成一个动作,可以尝试下面的步骤。
注册您的行动/活动
$("#some_element").keyPress( function( e ){
// the action to perform when keyPress event raised.
} );
答案 2 :(得分:0)
我怀疑你是否会在这里找到适当的答案。如前所述,我们缺乏为您提供最佳解决方案的背景,但我可以尝试。
我正在寻找行动而非事件......
您无法控制用户计算机,最接近的是调用事件。是的,你可能正在寻找一个事件。
因为当用户在输入中输入更多内容时,例如事件(keypress,keyup,keydown),字符输入到输入中,一些DOM事件被触发等。
可以模拟事件,可以模拟附加字符,可以模拟 DOM事件。但是,无法模拟用户或用户设备。
您可能需要编写一些抽象。找出目前关注的内容,解析可适用于此的东西并模拟行为。也许它也可以通过你自己的代码对 addEventListener 调用进行一些低级别的拦截来代理它们。
我建议您查看这是否是您的真实问题,并确保您不会遇到XY问题。例如,为什么要模拟用户,为什么不将“接线”与“逻辑”分开。
出于安全原因,对浏览器的访问是有限的,所以不是你想要做的一切都是可能的,但是这例如是用于集成测试你可能能够使用像Selenium这样的东西,它允许你做什么你问过但是只能在机器上执行它。