如何触发keypress
,使其模拟真实的用户行为?
如果我使用$('#input').trigger(jQuery.Event('keypress', {which: 65}))
我希望字母“a”出现在该输入中,但即使按键被触发,也不会出现任何内容。
是否可以在不直接更改输入的情况下显示按下的键value
?
演示:http: //jsfiddle.net/KrHYn/
如何触发keypress
,使其模拟真实的用户行为?
如果我使用$('#input').trigger(jQuery.Event('keypress', {which: 65}))
我希望字母“a”出现在该输入中,但即使按键被触发,也不会出现任何内容。
是否可以在不直接更改输入的情况下显示按下的键value
?
演示:http: //jsfiddle.net/KrHYn/
抱歉,不,这不是 DOM 事件的工作方式。当您使用 JavaScript 触发事件时,它不是受信任事件,这意味着它不会(此处稍后提到的情况除外)更改 DOM。
当您触发 jQuery(或 DOM)事件时,就像 DOM 告诉您的 JavaScript 代码在输入中按下了一个键。它通常不会改变 DOM 本身。
根据规范,触发时执行默认行为的唯一事件是click和DOMActivate。从规范:
大多数不受信任的事件不应触发默认操作,除了 click 或 DOMActivate 事件。这些事件触发激活触发器的默认操作(有关更多详细信息,请参阅激活触发器和行为);这些不受信任的事件的 isTrusted 属性值为 false,但仍会启动任何默认操作以实现向后兼容性。
所有其他不受信任的事件必须表现得好像在该事件上调用了 Event.preventDefault() 方法。
您必须更改输入的value
(.val()
在 jQuery 中)。
假设浏览器分为三部分: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 是一团糟。