防止功能onkeydown javascript

时间:2018-09-04 02:42:09

标签: javascript html

你好,我是新手,我有一个脚本可以在按下键盘时触发功能。但是我还有一个输入文本字段框,如果要在该输入字段框中键入内容,然后按该键即可触发该功能。该函数会触发,但是如果我在输入字段中键入内容,我不希望该函数触发,有没有办法做到这一点?

window.addEventListener("onkeydown", keyDown, true);
window.addEventListener("keydown", keyDown);

function keyDown() {
  var e = window.event;
  switch (e.keyCode) {
    case 72: // Key H
      test();
      break;
  }
}

function test() {
  document.getElementById('Codefield').value = Math.random().toString(36).substring(2, 15);
}
<input id="Codefield" value="" type="text">

<input id="Codefield2" value="Stop test function keydown or keydown if typeing here" type="text">

3 个答案:

答案 0 :(得分:2)

如果您将事件监听器添加到window,则所有输入将触发该函数。仅在需要的地方添加事件监听器。

document.getElementById('Codefield').addEventListener("onkeydown", keyDown, true);

另一种技术是从触发函数内部检查e.target并忽略代码(如果该代码来自您不想处理的输入)。

答案 1 :(得分:1)

您可以检查当前元素是否为输入元素。

function keyDown(e) {
  if (this.tagName == 'INPUT') {
    e.stopPropagation();
    return;
  }
  switch (e.keyCode) {
    case 72: // Key H
      test();
      break;
  }
}

此外,请勿使用window.event。这是非标准的,无法在Firefox中使用。该事件是事件侦听器的第一个参数。

答案 2 :(得分:0)

也许您应该使用focus选择器(来自jQuery):

if($("#Codefield2:focus")) {
    thisInput = true;
}

然后在函数的开头添加一个if语句,并检查thisInput是否为真。