执行触发的按键javascript
Execute triggered keypress javascript
如何触发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
(在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是一团糟。
- JavaScript执行暂时挂起页面
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 如何在使用jQuery.html()时防止javascript执行
- 如何打开一个新窗口或选项卡,并将其提供给javascript执行
- 如何在Ajax加载新内容时停止JavaScript执行
- 如何使用xpath和Javascript执行器打印文本
- cakehp2.x用javascript执行控制器
- 如何在不使用javascript执行的情况下为函数分配参数
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 如何在Javascript执行后防止浏览器锁定
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 在asp.net页面中显示javascript执行过程中的加载图标
- 基于浏览器窗口大小的条件 JavaScript 执行
- 使用 JavaScript 执行一行 PHP(不包括 PHP 文件)
- Dom 解析和 JavaScript 执行
- 为什么通过javascript执行php可以工作
- JavaScript执行路径
- 从javaScript执行服务器端代码
- 如何使用Javascript执行客户端web抓取