以编程方式模拟空格键,然后在文本输入字段上退格

问题描述 投票:0回答:1

我想在文本输入字段上分派用户操作。我希望好像一个实际的人已经使用他们的键盘来单击文本输入字段,按下空格键,然后按下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});

解决方案:实际分发事件。感谢您的回答!

javascript jquery keypress
1个回答
1
投票

可以模拟用户操作,但是他们将不执行默认功能,因为它将isTrusted设置为false(出于安全原因)。

例如,您可以构建一个事件以调度到“键入字母'a'”的文本字段。它会(err,应该)触发绑定到该事件处理程序(el.onkeydown(e){ if( e.key == 'a' ) …)的任何自定义函数,但是它会not在文本字段中键入字母a,否则将处理默认浏览器基于该击键的功能。

这是浏览器实现,不是您可以解决的问题。因此,当您无法直接在字段中“键入”时,您可以根据附加到那些特定事件的事件处理程序来运行事件。

我整理了一个codepen示例以显示我的意思:https://codepen.io/xhynk/pen/jOPbWzz

  • 页面加载为蓝色,带有2个字段
  • 在1秒钟内,它将运行一个“模拟”事件“单击>空间>退格”链的函数。
  • 事件将显示其在“否”输入中的操作
  • 页面变为绿色表示它已熄灭。

如果您愿意,可以将事件代码更改为字母,以查看实际的按键操作从不出现在“是”输入中。我添加了具有keydownonclick事件处理程序的“否”框,以通过更改value来显示触发了哪些事件以及以什么顺序触发。

您还可以手动单击“是”输入,然后单击“空格”和“退格”,并看到它们也触发了事件处理函数(事件函数将像模拟时一样运行),但是时间它们将实际上显示在框中(因为您实际上是这样做的,所以它们是受信任的事件)。

长话短说,您不能完全模拟受信任的“键入”按键事件,但是您可以

can随意处理那些特定的按键事件(即使您选择,也可以更改当前输入的值) 。

编辑:我看到顶部出现了一系列评论。这是一个

browser

函数,除非您找到(或构建)处理不可信isTrusted:false事件的浏览器,否则您将无法使用它。这与本地或沙箱编程环境无关。
© www.soinside.com 2019 - 2024. All rights reserved.