如何在输入中按下enter时阻止WebKit浏览器提交表单

时间:2009-04-15 13:31:38

标签: html safari google-chrome webkit submit

当使用包含许多文本输入的表单时,当在任何输入元素中按下“输入”时,WebKit / Safari / Google Chrome会提交表单。即使没有提交输入元素也没有注册 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键时,表单将被提交。

由于我使用异步HTTP请求在JavaScript中处理我的表单,因此我需要阻止此行为。我可以将 keypressed 事件的自定义处理程序注册到 preventDefault stopPropagation 。但它似乎很丑陋,并且在动态添加新文本输入元素时并不实用。

3 个答案:

答案 0 :(得分:5)

在表单上收听onsubmit事件并返回false

答案 1 :(得分:4)

如果您不希望表单提交,请不要​​包含&lt; form&gt;元素。包含独立的表单字段元素是有效的。

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

XSS漏洞。你需要htmlspecialchars()所有的文本到HTML输出。

答案 2 :(得分:1)

丹尼尔·怀特是对的,但是由于我对答案感到有点困惑,也许应该明确说明返回错误应该在事件上:

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