表单提交中的input、button、submit的区别

1.input[type=submit]

我们直接来看例子:

代码如下:

<form>
    <input name="name">
    <input type="submit" value="提交">
</form>

其中点击按钮后的url变为?name=222222222。

其中有些值得注意的细节:

  • 设置type=submit后,输入控件会变成一个按钮,显示的文字为其value值,默认值是Submit
  • form[method]默认值为GET,所以提交后会使用GET方式进行页面跳转。
  • input[type]默认值为text,所以第一个input显示为文本框。

input其实是一个由输入控件改装过来的按钮,这源于Web早期的简陋设计。我们给它设置name便可以验证这一点:

<input name='btn' value='提交' type='submit'>

提交后的结果为:

注意其中的URL为/?key=foo&btn=ok。作为按钮的input控件同时被当做一个表单输入提交给了服务器。 它到底是交互控件还是数据控件呢?定位是有些不清晰。再加上它的样式难以定制、不可作为其他标签的容器, 所以建议不要用input作为表单提交按钮

注意:inputtype属性还可以是button,这时它只是一个按钮,不会引发表单提交。

2.button[type=submit]

  button的语义很明确,就是一个按钮不含数据,作用就是用户交互。但它也有typevalue属性。 type的默认值是submit,所以点击一个button会引起表单提交:

<form>
  <input name='key'>
  <button>确定</button>
</form>

注意:如果你在做IE浏览器的兼容,请记住button[type]在IE中的默认值是button,这意味着它只是一个按钮而不会引发表单提交。

  另外,我们通过设置元素内容的方式来指定button的文字。这意味着button是一个容器控件, 其中可以包含任意的HTML标签,同时样式更容易定制。这也是为什么Bootstrap 文档中大量使用button作为示例的原因之一。

  但是,button会很乱。button可以设置namevalue。提交表单时,value会被作为表单数据提交给服务器。 在IE中,甚至会把button开始与结束标签之间的内容作为name对应的值提交给服务器。buttoninput的相似还不止于此,button也可以设置type=reset,此时点击按钮会导致表单被重置(这还挺有用的)。 w3school给出了如下的示例:

<form action="form_action.asp" method="get">
  First name: <input type="text" name="fname" />
  Last name: <input type="text" name="lname" />
  <button type="submit" value="Submit">Submit</button>
  <button type="reset" value="Reset">Reset</button>
</form>

对于button就不多说了,建议用button作为交互用的按钮,来提交表单。同时请注意设置type=submit来兼容IE。

3.回车键提交表单

Enter键是可以提交表单的!但是你可能已经注意到了,并非所有的表单都可以用Enter键来提交。来看HTML2.0 标准

When there is only one single-line text input field in a form, the user agent should accept Enter in that field as a request to submit the form.

当表单中只有一个单行的文本输入控件时,用户代理应当接受回车键来提交表单。

“单行”指的是typetext而非textarea,显然在textarea中回车提交表单是怎样的难以接受。 其实在实践中,有多个单行的input也可以用Enter提交,比如登录页面。

4.阻止表单提交

阻止表单提交也是一个常见的话题,通常用于客户端的表单验证。通用的办法是设置onsubmit

<form onsubmit="return false;">
  <input name='key'>
  <input value='ok' type='submit'>
</form>

只需要在onsubmit的一系列语句最后返回false,便可以阻止它提交。 如果你希望调用一个方法来决定是否阻止提交,记得在此处返回方法的返回值:

<form onsubmit="return false;">
  <input name='key'>
  <input value='ok' type='submit'>
</form>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的君君的前端之路

JS相关概念

17120
来自专栏九彩拼盘的叨叨叨

浏览器默认样式

浏览器都拥有一套自己的默认样式。 浏览器之所以有默认样式表,是为了没有样式表的页面也能凑活着看。 不同浏览器;以及版本不同的浏览器的默认样式一般都是不同的。

8720
来自专栏DT乱“码”

解决chrome测试的时候页面上的表单一直会自动填充

做项目时一直遇到一个问题,那就是用chrome测试的时候页面上的表单一直会自动填充,并且伴有黄色的背景颜色,有时候感觉很方便,有时候又很想去掉。 下面上下图: ...

22470
来自专栏IT开发技术与工作效率

Excel Post下载网址获取方法

20920
来自专栏柠檬先生

vue2.0 组件通信

组件通信:     子组件要想拿到父组件数据 props     子组件不允许直接给父级的数据, 赋值操作如果想更改,父组件每次穿一个对象给子组件,     对...

233100
来自专栏Android干货

小程序实践(三):九宫格实现及item跳转

20930
来自专栏Android干货

小程序实践(四):动态控制组件的显示/隐藏

组件有个属性:hidden='' ,值为true/false ,当false的时候说明不隐藏,当true的时候说明隐藏,注意该隐藏是不保留组件位置的。

12720
来自专栏挖坑填坑

Angular4记账webApp练手项目之二(在angular4项目中使用Angular WeUI)

安装后还需要引用weui 样式以及我们的font-awesome图标苦,在我们项目index.html中引用

15920
来自专栏互联网杂技

把图片变成字体,然后在引入到网页

首先是字体:如果把想要的字体引入到网页。 第一步:下载字体文件,一般下载到的是.TTF文件,只有一个文件。 第二步:把下载的字体,转换为其他格式,一般为了解决...

40780
来自专栏DeveWork

移除WordPress 管理后台的主题编辑功能

出于安全考虑,如果你的WordPress 是多人使用的(比如说一个团队博客,多用户管理)。那么为防止一些小白胡乱修改后台导致网页问题,可以移除WordPress...

21560

扫码关注云+社区

领取腾讯云代金券