【发布时间】:2017-07-01 18:12:41
【问题描述】:
我在这个网站上找到了很多结果,但他们似乎都使用 Jquery。我真的需要知道如何在没有 Jquery 的情况下做到这一点。我想要的是单击一个按钮并触发击键,例如 ALT+N 或 CTRL+G。谢谢。
【问题讨论】:
标签: javascript onclick keypress
我在这个网站上找到了很多结果,但他们似乎都使用 Jquery。我真的需要知道如何在没有 Jquery 的情况下做到这一点。我想要的是单击一个按钮并触发击键,例如 ALT+N 或 CTRL+G。谢谢。
【问题讨论】:
标签: javascript onclick keypress
看看KeyboardEvent 构造函数。你可以这样使用它:
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('alt-n').addEventListener('click', function () {
// create a new keyboard event
var event = new KeyboardEvent('keydown', {
key: 'n',
altKey: true
});
// dispatch the alt+n key press event
document.dispatchEvent(event);
});
document.getElementById('ctrl-g').addEventListener('click', function () {
// create a new keyboard event
var event = new KeyboardEvent('keydown', {
key: 'g',
ctrlKey: true
});
// dispatch the ctrl+g key press event
document.dispatchEvent(event);
});
// listen for any key presses
document.addEventListener('keydown', function (e) {
if (e.altKey || e.ctrlKey) {
// alt or ctrl is pressed
console.log('Key: ' + e.key + '; alt pressed: ' + e.altKey + '; ctrl pressed: ' + e.ctrlKey);
}
});
});
<button id="alt-n">alt+n</button>
<button id="ctrl-g">ctrl+g</button>
编辑
当浏览器解析您的 HTML 并到达 <script> 标记时,它会立即执行其中的 JavaScript。但是,可能还没有加载文档的其余部分。
这意味着页面中的某些 HTML 元素还不存在,并且您无法在 JavaScript 中访问它们(document.getElementById 将返回 null,如果它找不到元素并且您可以' t 从null 读取属性。
您必须等到元素加载完毕。当然,您可以创建一个函数并在 onclick 内联处理程序中调用它:
function dispatchAltN () {
var event = new KeyboardEvent('keydown', {
key: 'n',
altKey: true
});
document.dispatchEvent(event);
}
document.addEventListener('keydown', function (e) {
if (e.altKey || e.ctrlKey) {
// alt or ctrl is pressed
console.log('Key: ' + e.key + '; alt pressed: ' + e.altKey + '; ctrl pressed: ' + e.ctrlKey);
}
});
<button onclick="dispatchAltN();">alt+n</button>
但是,您不应该使用内联 JavaScript。
幸运的是,浏览器在加载完页面内容后会触发一个事件。此事件称为DOMContentLoaded。
当您等待浏览器第一次触发事件时,您可以确定您可以访问 DOM 中的所有元素。
【讨论】:
DOMContentLoaded 事件。我将编辑我的答案以使用此事件。
KeyboardEvent。 developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/…
KeyboardEvent。是的,IE 不支持它,你必须使用initKeyboardEvent。
HTML
<button onClick="myFunction()">Click me</button>
JavaScript
function myFunction(){
var k = new Event("keydown");
k.key="a"; //Change this value for different keys
document.dispatchEvent(k);
}
【讨论】:
您可以通过code 即event.code 触发任何event
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<script>
var ev = new Event('keydown');
ev.code = 110; // change this code to specific event code to trigger it
function Load() {
var button = document.getElementById('btn');
// Listen for the event.
button.addEventListener('keydown', function(e) {
if (e.code === 110) {
alert('Successfully triggered ALT + N');
}
// write your logic here
}, false);
}
function dispatchKeypress(e) {
e.preventDefault();
// Dispatch the event.
e.target.dispatchEvent(ev);
}
</script>
</head>
<body onload="Load()">
<button onclick="dispatchKeypress(event)" id="btn">Button</button>
</body>
</html>
【讨论】: