Html 在输入中按enter键时,如何防止WebKit浏览器提交表单

Html 在输入中按enter键时,如何防止WebKit浏览器提交表单,html,safari,google-chrome,webkit,submit,Html,Safari,Google Chrome,Webkit,Submit,当使用具有许多文本输入的表单时,WebKit/Safari/Google Chrome会在任何输入元素中按enter键时提交表单。即使没有提交输入元素,也没有注册onclick处理程序 例如,请参见以下示例代码: <html> <body> <form method="POST" action="."> <ul> <li><input type="te

当使用具有许多文本输入的表单时,WebKit/Safari/Google Chrome会在任何输入元素中按enter键时提交表单。即使没有提交输入元素,也没有注册onclick处理程序

例如,请参见以下示例代码:

<html>
    <body>
        <form method="POST" action=".">
            <ul>
                <li><input type="text" name="foo" value="<?=rand()?>"/></li>
                <li><input type="text" name="bar" value="<?=$_POST['foo']?>"/></li>
            </ul>
        </form>
    </body>
</html>
在两个文本输入元素中按enter键时,表单将被提交


因为我用JavaScript处理异步HTTP请求的表单,所以需要防止这种行为。我可以为按键事件注册一个自定义处理程序,以防止默认和StopRopagation。但是,当动态添加新的文本输入元素时,它看起来很难看,实际上并不实用。

侦听表单上的onsubmit事件并返回false。

如果您不希望表单提交,请不要包含任何元素。包含独立的表单字段元素是有效的

value="<?=$_POST['foo']?>"

XSS漏洞。您需要htmlspecialchars将所有文本转换为HTML输出。

Daniel A.White是对的,但由于我对答案有点困惑,也许应该明确指出,返回false应该出现在事件中:

function goWithSubmit(e)
{
  if (e) e.returnValue=false;
}

该死,我太慢了一分钟,汉克斯!我想知道为什么onsubmit=returnfalse;不起作用。如果你走这条路,需要记住的一件事是,一些浏览器不会试图记住表单数据>无自动完成。