这里同时讨论了几个主题。让我们试着澄清一下。
1. 您最关心的问题:
(为什么按ENTER时输入按钮不起作用?)
使用提交按钮类型。
<input type="submit".../>
..代替
<input type="button".../>
您的问题与使用onclick属性没有任何关系。相反,您没有得到您想要的行为,因为您使用了按钮输入类型,它的行为方式与提交按钮的行为方式不同。
在 HTML 和 XHTML 中,某些元素有默认行为。表单上的输入按钮通常属于“提交”类型。在大多数浏览器中,默认情况下,当从同一表单元素中的焦点元素按下 ENTER 时,会触发“提交”按钮。“按钮”输入类型没有。如果您想利用该默认行为,可以将输入类型更改为“提交”。
例如:
<form action="/post.php" method="post">
<!--
...
-->
<input type="submit" value="go"/>
</form>
2. 安全问题:
@Ady提到了一个安全问题。在 javascript 中进行登录有一大堆安全问题。这些可能超出了这个问题的范围,特别是因为您已经表示您并不特别担心它,并且您的登录方法实际上只是将 location.href 设置为新的 html 页面(表明您可能没有任何真正的安全机制)。
如果有人直接对这些问题感兴趣,这里是关于 SO相关主题的链接,而不是繁琐的。
3. 其他问题:
这是您的代码的快速清理,它仅遵循一些最佳实践。它没有解决人们提到的安全问题。相反,我包含它只是为了说明一些健康的习惯。如果您对我为什么以某种方式写东西有具体问题,请随时提问。此外,浏览相关主题的堆栈(因为您的问题可能已经在这里讨论过)。
主要需要注意的是从 HTML 中删除了事件属性(onclick=""、onsubmit="" 或 onkeypress="")。这些属于 javascript,并且将 javascript 事件排除在标记之外被认为是最佳实践。
<form action="#" method="post" id="loginwindow">
<h3>Login to view!</h3>
<label>User ID: <input type="text" id="userid"></label>
<label>Password: <input type="password" id="pass"></label>
<input type="submit" value="Check In" />
</form>
<script type="text/javascript">
window.onload = function () {
var loginForm = document.getElementById('loginwindow');
if ( loginwindow ) {
loginwindow.onsubmit = function () {
var userid = document.getElementById('userid');
var pass = document.getElementById('pass');
// Make sure javascript found the nodes:
if (!userid || !pass ) {
return false;
}
// Actually check values, however you'd like this to be done:
if (pass.value !== "secret") {
location.href = 'failure.html';
}
location.href = 'album.html';
return false;
};
}
};
</script>