当使用具有许多文本输入的表单时,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事件注册一个自定义处理程序来preventDefault和stopPropagation。但是当动态添加新的文本输入元素时,它看起来很丑陋,而且并不实用。