执行触发的按键javascript

时间:2013-03-31 13:35:47

标签: javascript keypress

如何触发keypress以模拟真实的用户行为?

如果我使用$('#input').trigger(jQuery.Event('keypress', {which: 65}))我希望字母“a”出现在该输入中,但即使触发按键也不会出现任何内容。

是否可以在不直接更改输入value

的情况下显示按下的键

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

2 个答案:

答案 0 :(得分:4)

很抱歉,但不,这不是DOM事件的工作方式。当您使用JavaScript触发事件时,它不是受信任的事件,这意味着它不会(除了稍后提到的情况)更改DOM。

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

根据click and DOMActivate,触发时将执行默认行为的唯一事件是specification。来自规范:

  

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

     

所有其他不受信任的事件必须表现得就像在该事件上调用了Event.preventDefault()方法一样。

你必须在jQuery中更改输入的value.val())。

答案 1 :(得分:2)

假设浏览器分为三个部分: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是一团糟。