HTML表单,多个提交按钮,后期有效负载忽略未单击的按钮:这是标准行为吗?

Jon*_*ram 6 html5

请考虑HTML5文档中的以下表单:

<form  method="post" action="http://example.com/submit/">
    <button name="confirm" value="1" type="submit">Confirm</button>
    <button name="re-send" value="1" type="submit">Re-send code</button>
    <button name="cancel" value="1" type="submit">Cancel change</button>
</form> 
Run Code Online (Sandbox Code Playgroud)

使用Chrome,单击第一个按钮可生成请求的有效负载confirm=1.类似地,第二个按钮导致re-send=1第三个按钮cancel=1.

检查请求有效负载服务器端允许我确定单击三个按钮中的哪一个(假设请求有效负载中只有三个密钥中的一个).

在所有情况下,未单击的按钮的键:值对将从请求有效内容中排除.这非常有用.

此行为(未单击的按钮键:值对是否从请求有效负载中排除)标准?

Aka*_*oni 1

据我所知,是的。

来自 HTML4 规范: http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.2

每个成功的控件都有其控件名称与其当前值配对,作为提交的表单数据集的一部分。...如果一张表单包含多个提交按钮,则只有激活的提交按钮才成功。

来自 HTML5 规范: http://www.w3.org/TR/2012/CR-html5-20121217/forms.html#the-button-element

注意:仅当按钮本身用于启动表单提交时,按钮(及其值)才会包含在表单提交中。

我很确定 < IE8 将提交元素内容而不是值(例如,confirm=Confirm),但大多数其他常见浏览器应该可以正常工作。

或许可以考虑:

<form  method="post" action="http://example.com/submit/">
    <button name="submit-action" value="confirm" type="submit">Confirm</button>
    <button name="submit-action" value="re-send code" type="submit">Re-send code</button>
    <button name="submit-action" value="cancel change" type="submit">Cancel change</button>
</form>
Run Code Online (Sandbox Code Playgroud)

另外,值得注意的是,一些较旧的浏览器可能会出现这样的情况:它们可能会将其视为没有单击任何按钮(例如,由 javascript 提交的表单或输入按钮)。通过默认“确认”可能值得满足这一点。不过,现代浏览器上的 HTML5 不应给您带来任何悲伤。