event.preventDefault无法正常工作

时间:2018-07-19 20:44:13

标签: javascript html addeventlistener

我目前正在开发机器人,没什么好想的。只是一些基本的漫游器,问题是,即使我输入两个event.preventDefault(),例如,每当我键入google时,它都会刷新页面。而当我以某种方式解决此问题时,它会打开两个选项卡(在键入google时),因此我对此问题感到非常困惑。

JavaScript:

var INPUT = document.getElementsByTagName("input")[0];
INPUT.addEventListener("keyup", function(event) {
  event.preventDefault();
  if (event.keyCode === 13) {
    document.forms[0].submit();
  }
});

function requester(event) {
  event.preventDefault();
  var valeur = (document.getElementsByTagName("input")[0].value).toString().trim().toLowerCase();
  switch (valeur) {
    case "date": date(); break;
    case "day": day(); break;
    case "hour": hour(); break;
    case "stop": stopTime(); break;
    case "youtube": open("https://www.youtube.ca"); break;
    case "google": open("https://www.google.ca"); break;
    case "chrono": chrono(); break;
    case "refresh": location.reload(); break;
    case "my_playlist": open("https://www.youtube.com/playlist?list=PLjhkALRcmTGR2MQ-Y5cMERhq15ieGOqBR"); break;
  }
}

HTML:

<form onsubmit="requester(event)">
  <input type="text" autocomplete="off" style="font-size:150px;text-transform: uppercase;" autofocus>
</form>

1 个答案:

答案 0 :(得分:2)

document.forms[0].submit()不会触发submit事件:

  

直接调用此方法时,不会引发submit事件(特别是表单的onsubmit事件处理程序未运行),并且也不会触发约束验证。

(来自the MDN documentation for HTMLFormElement.submit()

此外,默认表单提交是由keydown而非keyup触发的。

两个简单的解决方案:

  1. 删除keyup处理程序。默认情况下,在表单字段中按 Return 会触发submit事件。您不需要执行其他任何操作。

  2. 或者,如果您确实希望拥有键盘处理程序,请将处理程序绑定到keydown,然后直接调用requester,而不是调用.submit()

    < / li>