【发布时间】:2011-12-31 23:23:43
【问题描述】:
对于给定的 HTML 表单,是否需要用户代理以特定顺序构建提交请求?
我正在查看 HTML 4.0.1 规范,它似乎没有指定“成功控制”成为提交请求的一部分的顺序。 Section 17.13.3,处理表单数据,状态:
当用户提交表单时(例如,通过激活提交按钮),用户代理会按如下方式对其进行处理。
第一步:识别successful controls
第二步:构建表单数据集
表单数据集是由成功的控件构造而成的control-name/current-value 对序列
第三步:编码表单数据集
然后根据
FORM元素的enctype属性指定的内容类型对表单数据集进行编码。第四步:提交编码后的表单数据集
在第二步,表单数据集被描述为一个序列,所以它在第三步的编码顺序大概是固定的。但是,这引出了表单数据集中成功控件的顺序是什么的问题。
例如,给定以下 HTML 表单:
<form action="#" method="GET">
<input type="hidden" name="key1" value="value1" />
<div>
<div>
<input type="hidden" name="key2" value="value2" />
</div>
<input type="hidden" name="key3" value="value3" />
<input type="submit" name="submit" value="Submit" />
</div>
<input type="hidden" name="key5" value="value5" />
</form>
表单数据集可以是
[ (
"key1","value1"), ("key2","value2"), ("key3","value3"), ("submit","Submit"), ("key5", @ 987654337@)]
(即 DOM 的深度优先搜索);或
[ (
"key1","value1"), ("key5","value5"), ("key3","value3"), ("submit","Submit"), ("key2", @ 987654347@)]
(广度优先搜索);或者甚至是由于在随机哈希表中迭代控制名称/当前值对而产生的不确定顺序?
用 IE 9 和 Firefox 9.0.1 测试这个表单,似乎都使用深度优先搜索顺序。也许其他浏览器不同。问题是这个命令是否是在某个地方规定的。
【问题讨论】:
-
不要认为他们必须遵循的顺序。
标签: html forms web-standards