在其自然行为之前执行事件

时间:2016-01-16 09:18:08

标签: javascript

有没有办法在自然行为之前执行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>

4 个答案:

答案 0 :(得分:1)

试试这个 - 它有点像黑客

&#13;
&#13;
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;
&#13;
&#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!");
}