我想在文本输入字段上分派用户操作。我希望好像一个实际的人已经使用他们的键盘来单击文本输入字段,按下空格键,然后按下Backspace键。使用我使用的代码,什么都没有发生。
The JSFIDDLE https://jsfiddle.net/zvrhfq9j/
HTML
<input type="text" name="psychTree-savedNodes" style="width:20%" />
JS
$('input[name="psychTree-savedNodes"]').focus();
$('input[name="psychTree-savedNodes"]').trigger({type: 'keypress', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keyup', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keydown', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keypress', which: 8, keyCode: 8});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keyup', which: 8, keyCode: 8});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keydown', which: 8, keyCode: 8});
解决方案:实际分发事件。感谢您的回答!
您可以模拟用户操作,但是他们将不执行默认功能,因为它将isTrusted
设置为false(出于安全原因)。
例如,您可以构建一个事件以调度到“键入字母'a'”的文本字段。它会(err,应该)触发绑定到该事件处理程序(el.onkeydown(e){ if( e.key == 'a' ) …
)的任何自定义函数,但是它会not在文本字段中键入字母a
,否则将处理默认浏览器基于该击键的功能。
这是浏览器实现,不是您可以解决的问题。因此,当您无法直接在字段中“键入”时,您可以根据附加到那些特定事件的事件处理程序来运行事件。
我整理了一个codepen示例以显示我的意思:https://codepen.io/xhynk/pen/jOPbWzz
如果您愿意,可以将事件代码更改为字母,以查看实际的按键操作从不出现在“是”输入中。我添加了具有keydown
和onclick
事件处理程序的“否”框,以通过更改value
来显示触发了哪些事件以及以什么顺序触发。
您还可以手动单击“是”输入,然后单击“空格”和“退格”,并看到它们也触发了事件处理函数(事件函数将像模拟时一样运行),但是时间它们将实际上显示在框中(因为您实际上是这样做的,所以它们是受信任的事件)。
长话短说,您不能完全模拟受信任的“键入”按键事件,但是您可以can随意处理那些特定的按键事件(即使您选择,也可以更改当前输入的值) 。
编辑:我看到顶部出现了一系列评论。这是一个browser
函数,除非您找到(或构建)处理不可信isTrusted:false
事件的浏览器,否则您将无法使用它。这与本地或沙箱编程环境无关。