Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript event.preventDefault不';我不能正常工作_Javascript_Html_Addeventlistener - Fatal编程技术网

Javascript event.preventDefault不';我不能正常工作

Javascript event.preventDefault不';我不能正常工作,javascript,html,addeventlistener,Javascript,Html,Addeventlistener,我现在正在做一个机器人,没什么特别的。只是一些基本的机器人,比如说,每当我输入google时,它就会刷新页面,即使我输入了两个event.preventDefault()。当我解决这个问题时,它会打开两个选项卡(当键入google时),所以我真的对这个问题感到困惑 JavaScript: var INPUT = document.getElementsByTagName("input")[0]; INPUT.addEventListener("keyup", function(event) {

我现在正在做一个机器人,没什么特别的。只是一些基本的机器人,比如说,每当我输入google时,它就会刷新页面,即使我输入了两个
event.preventDefault()
。当我解决这个问题时,它会打开两个选项卡(当键入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>

文档。表单[0]。提交()
不会触发
提交事件:

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

(来自)

此外,默认表单提交由
keydown
触发,而不是由
keydup
触发

两个简单的解决方案:

  • 移除
    keyup
    处理程序。默认情况下,在表单字段中按Return将触发
    submit
    事件;您不需要实现任何附加功能

  • 或者,如果您确实想要一个键盘处理程序,请将该处理程序绑定到
    keydown
    ,并直接调用
    requester
    ,而不是调用
    .submit()


  • 好的,我尝试了第二种解决方案,但正如我在帖子中所说,当谷歌被输入时,它会打开两个标签,你知道如何解决这个问题吗?哦,糟了。另一个问题是绑定到
    keyup
    。此事件通常不用于任何用途—按键在按下时触发,而不是在释放时触发!您可能希望使用
    keydown