我目前正在开发机器人,没什么好想的。只是一些基本的漫游器,问题是,即使我输入两个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>
答案 0 :(得分:2)
document.forms[0].submit()
不会触发submit
事件:
直接调用此方法时,不会引发
submit
事件(特别是表单的onsubmit
事件处理程序未运行),并且也不会触发约束验证。
(来自the MDN documentation for HTMLFormElement.submit()
)
此外,默认表单提交是由keydown
而非keyup
触发的。
两个简单的解决方案:
删除keyup
处理程序。默认情况下,在表单字段中按 Return 会触发submit
事件。您不需要执行其他任何操作。
或者,如果您确实希望拥有键盘处理程序,请将处理程序绑定到keydown
,然后直接调用requester
,而不是调用.submit()
。