0

当使用具有许多文本输入的表单时,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 键时,将提交表单。

由于我在 JavaScript 中使用异步 HTTP 请求处理表单,因此我需要防止这种行为。我可以为keypressed事件注册一个自定义处理程序来preventDefaultstopPropagation。但是当动态添加新的文本输入元素时,它看起来很丑陋,而且并不实用。

4

3 回答 3

5

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

于 2009-04-15T13:40:05.843 回答
4

如果您不想提交表单,请不要包含 <form> 元素。包含独立的表单字段元素是有效的。

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

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

于 2009-04-15T14:25:02.787 回答
1

Daniel A. White 是对的,但由于我对答案有点困惑,也许应该明确说明 return false 应该在事件上:

function goWithSubmit(e)
{
  if (e) e.returnValue=false;
}
于 2009-12-25T11:26:19.010 回答