6

考虑 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> 

使用 Chrome,单击第一个按钮会生成confirm=1. 同样,第二个按钮导致re-send=1第三个cancel=1

检查服务器端的请求负载允许我确定三个按钮中的哪一个被单击(假设请求负载中只有三个键之一)。

在所有情况下,未点击按钮的键:值对都从请求负载中排除。这非常有用。

这种行为(未点击的按钮键:值对从请求有效负载中排除)是标准的吗?

4

1 回答 1

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>

此外,值得注意的是,一些较旧的浏览器可能有一些场景,他们可能会将其视为没有单击任何按钮(例如,由 javascript 提交的表单或输入按钮代替)。默认为“确认”可能值得满足这一点。不过,现代浏览器上的 HTML5 不应该给您带来任何痛苦。

于 2013-06-24T04:34:35.300 回答