执行触发的按键javascript

Execute triggered keypress javascript

本文关键字:javascript 执行      更新时间:2023-09-26

如何触发keypress,使其模拟真实用户行为?

如果我使用$('#input').trigger(jQuery.Event('keypress', {which: 65})),我希望字母'a'出现在该输入中,但即使触发了按键也没有出现。

不直接改变输入的value是否可以显示按下的键?

演示:http://jsfiddle.net/KrHYn/

对不起,不是这样的,DOM事件不是这样工作的。当你用JavaScript触发一个事件时,它不是一个受信任的事件,这意味着它不会改变DOM(除了后面提到的情况)。

触发jQuery(或DOM)事件时,就像DOM告诉JavaScript代码在输入中按了一个键。通常不会改变DOM本身。

触发时将执行默认行为的唯一事件是clickDOMActivate。来自规范:

除了click或DOMActivate事件外,大多数不受信任的事件不应该触发默认操作。这些事件触发激活触发器的默认动作(详情请参阅激活触发器和行为);这些不受信任的事件的isTrusted属性值为false,但仍然会启动任何向后兼容的默认操作。

所有其他不受信任的事件必须表现得好像在该事件上调用了event. preventdefault()方法。

你必须改变输入的value(在jQuery中是.val())

假设浏览器分为三个部分:HTML、DOM和JavaScript。DOM是HTML和JS对话的中间人。

当JavaScript加载一个元素时,当使用document.getElementById时,它告诉DOM:"嘿,我需要这个元素!"如果DOM找到了该元素,它将该元素返回到一个称为DOM元素的特殊对象中。

当HTML更改时(您在字段中输入一些值),它向DOM发送一条消息:"嘿,我的value在这里不一样。"这样DOM就更新了它的DOM元素。

当JavaScript在keypress上添加事件监听器时,它告诉DOM:"嘿,每当keypress事件被发送时,请告诉我。"

因此,当HTML发生变化时(在输入中完成了按键操作),它会告诉DOM:"嘿,这里有一个按键事件!"因为DOM知道JS正在等待按键事件的更新,所以它告诉JS:"嘿,老兄,那里触发了一个事件。"

如果你从JS本身运行事件,DOM会立即发送回JS:"嘿,一个keypress事件被触发了,我想你可能会感兴趣。"它不会进入HTML并更改它。

为什么?因为DOM不信任JS。它知道JS是一个坏男孩。这里的关键词是"信任"。正如@Benjamin所指出的,存在可信事件。虽然很少。还有"可信任的向后兼容性"。

是的,DOM是一团糟。