有没有办法在自然行为之前执行javascript-event ?
例如,使用下面的代码,如果按键盘上的/
键,此字符将立即打印在输入字段中,2秒后,将显示警告。这是显而易见的。
但有没有办法在打印/
之前显示警告?
<input></input>
<script>
document.querySelector("input").focus();
addEventListener("keydown", function (e) { if (e.keyCode === 191) { myFunc(e); } });
function myFunc(e) {
setTimeout(function() {
alert("Hello!");
}, 2000);
}
</script>
答案 0 :(得分:1)
试试这个 - 它有点像黑客
document.querySelector("input").focus();
addEventListener("keyup", function(e) {
console.log(e);
//debugger;
if (e.keyCode === 191) {
e.target.value = "";
myFunc(e, e.target);
}
});
function myFunc(e, t) {
setTimeout(function() {
alert("Hello!");
t.value = "/";
}, 2000);
}
&#13;
<input></input>
&#13;
答案 1 :(得分:1)
keypress
事件中所有输入字符的统一解决方案:
addEventListener("keypress", function(e) {
var val = e.which || e.keyCode;
e.preventDefault();
myFunc(e.target, val);
});
function myFunc(target, val) {
setTimeout(function() {
alert("Hello!");
target.value = String.fromCharCode(val);
}, 2000);
}
试试吧。
答案 2 :(得分:0)
您描述的行为实际上是默认行为,如下所示:
document.getElementById('test').addEventListener('keydown', function(e) {
e.preventDefault();
}, true);
<input type="text" id="test">
如果取消keydown
事件,则不会打印该密钥。因此,代码在默认操作之前执行。
答案 3 :(得分:0)
尝试更改
function myFunc(e) {
setTimeout(function() {
alert("Hello!");
}, 2000);
}
到
function myFunc(e) {
alert("Hello!");
}