【发布时间】:2013-12-21 15:13:11
【问题描述】:
我见过两种设置表单动作属性的方法。
#1。一个空的动作属性:
action=""
#2。带有# 的操作属性:
action="#"
两者有什么区别?
【问题讨论】:
我见过两种设置表单动作属性的方法。
#1。一个空的动作属性:
action=""
#2。带有# 的操作属性:
action="#"
两者有什么区别?
【问题讨论】:
第一个 ("") 解析为基本 URL,第二个 (#) 解析为文档 URL。
以下内容完全有效:
<form action="" method="post">
<p><input type="submit"/></p>
</form>
现在请注意,根据HTML4 specification,action 属性是强制性的,并且它必须包含有效的 URI。但是根据URI RFC,一个空的URI仍然是一个URI:
不包含 URI 的 URI 引用是对当前文档的引用。换句话说,文档中的空 URI 引用被解释为对该文档开头的引用,而仅包含片段标识符的引用是对该文档的已识别片段的引用。遍历此类引用不应导致额外的检索操作。但是,如果 URI 引用出现在始终旨在导致新请求的上下文中,例如 HTML 的 FORM 元素,则空的 URI 引用表示当前文档的基本 URI,应替换为该 URI当转换为请求时。
(摘自this page)
虽然它是强制性的,但如果没有指定 action 属性,大多数(如果不是所有)浏览器都会回发给响应的发起者。
在 HTML5 中,action 属性不是强制性的。来自specs:
action 和 formaction 内容属性,如果指定,其值必须是有效的非空 URL,可能被空格包围。
相关:
【讨论】:
第一个解析为当前页面的 URL*(保留 URL 中的任何片段标识符,您也可以完全省略 action 属性),另一个解析为页面顶部(删除任何片段已经存在的标识符)。
* 给定正常的 URL 解析,我认为它会解析为当前页面 URL 中查询字符串和片段 id 之前的最后一个 /,但 HTML 5 special cases empty strings here (step 8)(可能是为了向后兼容,因为大多数浏览器都有历史上是这样实现的)。
【讨论】: