有没有简单的方法可以在Javascript中“转发”事件?我的最终目标是通过以下方式增强UI响应能力:我有一个网站,其中只有一个输入文本字段,可将查询提交到后端数据库。如果用户在输入字段不清晰时按下某个键,则我想捕获文档级别的keypress事件,并将其转发到输入字段。(这似乎是提高UI响应能力的一种相当普遍的方法,例如Google在其主要搜索网站上执行此操作。)
所以我有一个像这样的文本输入字段:
<input id="query" onkeydown="f(event)">
Run Code Online (Sandbox Code Playgroud)
我尝试转发这样的事件:
function handler(ev)
{
var query = document.getElementById("query");
query.dispatchEvent(ev);
}
document.addEventListener("keydown", handler, false);
Run Code Online (Sandbox Code Playgroud)
现在,忽略了跨浏览器问题与addEventListener和dispatchEvent,这并不甚至在Firefox浏览器同时支持这些功能。Javascript解释器引发异常: Error: uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent]"
那么,是否有可能转发这样的事件?还是我需要使用创建一个新事件initKeyEvent,然后将该事件分派到输入元素?
以下是键盘事件的示例:
HTML 文件(index.html):
<!DOCTYPE html>
<html>
<head>
<title>Stackoverflow</title>
<script type="text/javascript" src="sof.js"> </script>
</head>
<body>
<input id="query" onkeydown="f(event);"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JavaScript 文件(sof.js):
function simulateKeyDown () {
// DOM Level 3 events
var evt = document.createEvent ("KeyboardEvent");
// DOM Level 3 events
evt.initKeyboardEvent ("keydown", false, false, null, false, false, false, false, 0, 0);
var query = document.getElementById ('query');
query.dispatchEvent (evt);
}
window.onload = function () {
document.addEventListener ('keydown', simulateKeyDown, false);
}
function f (ev) {
console.log ('ciao');
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当加载窗口时,它将一个新的处理程序附加到文档的keydown事件。当按下某个键时,将创建一个新的KeyboardEvent事件,并初始化(使用“keydown”),然后分派到输入元素。是的,它有点复杂,但它有效;)
欲了解更多信息:
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |