如果提交表单但未通过任何特定按钮提交,例如
Enter
HTMLFormElement.submit()
浏览器应如何确定按下多个提交按钮(如果有)中的哪个?
这在两个层面上都很重要:
onclick
到目前为止,我的实验表明:
标准怎么说?
如果有帮助,这是我的测试代码(PHP仅与我的测试方法有关,与我的问题本身无关)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Test</title> </head> <body> <h1>Get</h1> <dl> <?php foreach ($_GET as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?> </dl> <h1>Post</h1> <dl> <?php foreach ($_POST as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?> </dl> <form name="theForm" method="<?php echo isset($_GET['method']) ? $_GET['method'] : 'get'; ?>" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"> <input type="text" name="method" /> <input type="submit" name="action" value="Button 1" onclick="alert('Button 1'); return true" /> <input type="text" name="stuff" /> <input type="submit" name="action" value="Button 2" onclick="alert('Button 2'); return true" /> <input type="button" value="submit" onclick="document.theForm.submit();" /> </form> </body></html>
如果您通过Javascript(即提交表单formElement.submit()或任何等价物),然后 无 的提交按钮被认为是成功的,没有它们的值都包含在提交的数据。(请注意,如果您使用提交表单,submitElement.click()那么您所引用的提交就被认为是活动的;这并没有真正落到您的问题的范围之内,因为此处的提交按钮是明确的,但我想我应该将其包括在内对于那些阅读了第一部分的人,并且想知道如何通过JS表单提交成功地完成一个提交按钮。当然,表单的onsubmit处理程序仍然会以这种方式触发,而他们不会通过,form.submit()因此这是另一回事了……)
formElement.submit()
submitElement.click()
form.submit()
如果在非textarea字段中通过按Enter提交表单,则实际上取决于用户代理在此处确定所需内容。该规范不说有关使用输入在文本输入字段键的同时提交表单什么(如果你标签的按钮,使用空间或任何激活它,然后还有为特定的提交按钮是没有问题的明确使用)。它只说要激活一个提交按钮就必须提交一个表单,甚至不需要输入例如文本输入就可以提交该表单。
我相信InternetExplorer会选择源中最先出现的“提交”按钮;我觉得Firefox和Opera选择的TabIndex最低的按钮,如果没有其他定义,则会退回到第一个定义的按钮。关于提交者是否具有非默认值属性IIRC,还存在一些复杂问题。
要解决的问题是,这里没有定义明确的标准,这完全取决于浏览器的想法- 因此,无论您在做什么,都应尽可能避免依赖任何特定的行为。如果您真的必须知道,您可能可以找出各种浏览器版本的行为,但是当我前一段时间进行调查时,存在一些相当复杂的条件(当然,这些条件可能会随新的浏览器版本而改变),我建议您尽可能避免它!