"<form action="#">"和"<form method="post" action="#">"有什么作用?

80

我正在阅读一本关于HTML开发的书籍(我对此还比较陌生),尽管这本书仅在一个月前(2011年11月)出版,但作者是一位经验丰富的编码人员,他可能认为在表单中使用#作为操作代码已经过时了吗?

因为我正尝试着理解示例代码的要点,但我无法找到有关form action="#"的解释,尽管我进行了搜索。

<form action="#">   

在谷歌、在SO和在www.w3schools.com上都有相关内容。

有人知道表单中 # 这个操作的含义吗?


8
http://w3fools.com/ - Jakub
1
操作指定信息将被发送到哪里。在你找到的例子中,表单可能是通过JavaScript提交的。 - Andrew Samuelsen
1
这似乎是糟糕的示例代码,你几乎永远不需要这样做。即使你使用JavaScript提交表单,硬编码虚假的“action”也是不必要的。 - Wesley Murch
表单的事实标准文档可以在w3c的网站上找到。 - Joseph Marikle
我刚刚发现了一些类似于<form action='?'></form>的表单,这是有效的吗? - guitarjunk
4个回答

89

通常,"action"属性指定表单提交的文件/页面(使用方法参数中描述的方法(post、get等))。

"# "的操作表示表单保留在同一页上,并在URL末尾添加"# "。类似的用法出现在锚点上。例如:<a href=#">Link</a>,会保持在同一页上。

因此,表单提交到同一页,然后处理数据等。


3
有时候,@Nik 的服务器操作很简单,可以在一个页面上完成。在使用 PHP 构建简单数据库查找页面时,我经常使用这种方法。这比为简单的操作创建两个页面更加简单。 - Joseph Marikle
2
页面只是将数据提交到自身,是吗? - Nik
2
虽然如此,我并不明白 action="page.php" 和 action="#" 有什么不同(假设 page.php 是当前页面)。两者都会刷新页面,考虑使用 ajax 提交代替。 - MEURSAULT
2
@Nik,你说得对。在那个页面上,你需要构建决策逻辑,判断是处理已发布的输入还是等待提交。 - Joseph Marikle
1
@Myster action="" 可以工作,但不会验证。action="?" 会清除现有的查询字符串值,这可能不是理想的。当您在服务器端具有单独的 GET 和 POST 处理程序时,执行 action="#" 是有用的...即 GET 渲染表单和 POST 处理表单数据。这样做可以避免在表单中硬编码 URI,以防您稍后重新映射 URL/路由(冒着客户端 HTML 模板表单“操作”与服务器端路由处理程序不同步的风险)。 - mattpr
显示剩余3条评论

31
action=""会解析为页面地址。action="#"会解析为页面地址+#,这表示一个空的片段标识符。
采用后者可能会防止导航(新载入)到同一页并尝试跳转到带有片段标识符的ID元素。但是,由于它为空,它不会跳转到任何地方。
通常,作者只会在类似href的属性中放置#,当他们不会使用该属性而改用脚本时。在这些情况下,他们可以使用action=""(或如果验证允许,则省略它)。

19

显然,在HTML5之前需要使用action(而#只是一个替代),但现在不再需要使用它。

请参见操作属性

When specified with no attributes, as below, the data is sent to the same page that the form is present on:

<form>

4

# 标签可以让你将数据发送到同一个文件中。我认为这是一个包含三个步骤的过程:

  1. 查询数据库以填充表单
  2. 允许用户更改表单中的数据
  3. 通过php脚本重新提交数据到数据库

使用 method='#',你可以在同一个文件中完成以上所有步骤。

提交查询执行后,页面将重新加载,显示来自数据库的更新数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接