当使用包含许多文本输入的表单时,当在任何输入元素中按下“输入”时,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 。但它似乎很丑陋,并且在动态添加新文本输入元素时并不实用。
答案 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;
}