原文: HTML Form – Input Type and Submit Button Example

表单是网络中最重要的部分之一。没有它们,就不会有收集数据、搜索资源或注册接收有价值信息的简便方法。

你可以用 HTML form 元素在网站上嵌入表单。在 form 元素内部,有几个嵌套输入。这些输入也被称为表单控件。

在本教程中,我们将探讨 HTML form 元素,它所接受的各种输入类型,以及如何创建一个提交数据的按钮。

最后,你将知道表单是如何工作的,并且你将能够自信地制作它们。

基本的 HTML 表单语法

<form action="mywebsite.com" method="POST">
    <!--Input of any type and textareas goes in here-->
</form>

HTML 表单输入类型

你使用 <input> 标签来创建 HTML 中的各种表单控件。它是一个内联元素,具有 typenameminlengthmaxlengthplaceholder 等等属性。每个属性都有特定的取值。

placeholder 属性很重要,因为它可以帮助用户在输入任何东西之前了解输入字段的目的。

有 20 种不同的输入类型,我们将逐一看一下它们。

文本类型

这种类型的输入取值为“文本”,所以它创建了一个单行的文本输入。

<input type="text" placeholder="Enter name" />

文本类型的输入看起来像下面的屏幕截图:

textInput

密码类型

顾名思义,一个密码类型的输入会创建一个密码。它对用户来说是自动不可见的,除非它被 JavaScript 所操纵。

<input type="password" placeholder="Enter your password" />
passwordInput

电子邮件类型

电子邮件类型的输入定义了一个用于输入电子邮件地址的字段。

<input type="email" placeholder="Enter your email" />
typeEmail

数字类型

这种类型的输入只允许用户插入数字。

<input type="number" placeholder="Enter a number" />
numberInput

单选类型

有时,用户需要从众多选项中挑选一个。一个类型属性设置为“单选”的输入字段让你做到这一点。

 <input type="radio" />
typeRadio

复选框类型

所以,对于输入类型的单选,用户可以从众多的选项中挑选一个。如果你想让他们尽可能多地挑选选项呢?这就是类型属性设置为 checkbox 的输入的作用。

<input type="checkbox" />
typeCheckbox

提交类型

你用这个类型来给表单添加一个提交按钮。当用户点击它时,它会自动提交表单。它需要一个 value 属性,定义出现在按钮内的文本。

<input type="submit" value="Enter to Win" />
typeSubmit

按钮类型

类型设置为 button 的输入会创建一个按钮,可以通过 JavaScript 的 onClick 事件监听器类型进行操作。它创建的按钮就像提交类型的输入一样,但例外的是,其值默认是空的,所以必须指定。

<input type="button" value="Submit" />
typeButton

文件类型

这定义了一个用于提交文件的字段。当用户点击它时,他们会被提示插入所需的文件类型,可能是图像、PDF、文档文件等。

<input type="file" />

一个输入文件类型的结果看起来是这样的:

fileInput

颜色类型

这是一个由 HTML5 引入的花式输入类型。通过它,用户可以提交他们最喜欢的颜色,黑色(#000000)是默认值,但可以通过将该值设置为所需的颜色来覆盖。

许多开发者将其作为一种技巧,以选择 RGB、HSL 和字母数字格式中可用的不同颜色色调。

<input type="color" />

一个输入颜色类型的结果看起来是这样的:

colorInput

搜索类型

搜索类型的输入定义了一个文本字段,就像文本的输入类型一样。但这一次它的唯一目的是搜索信息。它与文本类型的不同之处在于,一旦用户开始输入,就会出现一个取消按钮。

<input type="search" />
typeSearch

URL 类型

当输入标签的类型属性被设置为 URL 时,它会显示一个用户可以输入 URL 的区域。

<input type="url" />
typeURL

Tel 类型

输入类型为 tel,让你可以从用户那里收集电话号码。

<input type="tel" />
typeTel

日期类型

你可能已经在一个网站上注册了,在那里你被要求提供某个事件的日期。该网站可能使用了一个类型值设置为日期的输入来实现这一目的。

<input type="date" />

一个日期类型的输入是这样的:

dateInput

日期-本地类型

这与日期类型输入的工作原理相同,但它也可以让用户选择一个具有特定时间的日期。

<input type="datetime-local" />
datelocalInput

周类型

输入类型为周,可以让用户选择一个特定的星期。

<input type="week" />
weekInput

月类型

当用户点击它时,带有月份类型的输入会弹出月份供用户选择。

<input type="month" />
monthInput

Textarea

有的时候,用户需要填写多行文本,这在文本输入类型中是不合适的(因为它指定的是单行文本字段)。

textarea 可以让用户这样做,因为它定义了多行的文本输入。它有自己的属性,如 cols 表示列的数量,rows 表示行的数量。

<textarea cols="50" rows="20"></textarea>
textarea

多选

这就像一个单选按钮和复选框的组合。它在页面中嵌入了两个元素——一个 select 元素和一个 option,后者总是嵌套在 select 元素中。

默认情况下,用户只能选择其中一个选项。但通过多重属性,你可以让用户选择一个以上的选项。

<select>
      <option value="HTML">Select a Language</option>
      <option value="HTML">HTML</option>
      <option value="CSS">CSS</option>
      <option value="JavaScript">JavaScript</option>
      <option value="React">React</option>
</select>
selectDemo

如何给 HTML 输入加标签

为表单控件指定标签是很重要的。当它们通过 for 属性和输入的 id 属性与输入字段正确连接时,用户就会更容易使用,因为他们可以直接点击标签本身来访问输入。

<label for="name">Name</label>
<input type="text" id="name" /> <br />
<label for="check">Agree with terms</label>
<input type="checkbox" id="check" />
labelDemo

HTML 表单是如何工作的

当用户填写表单并用提交按钮提交时,表单控件中的数据会通过 GETPOST HTTP 请求方法发送到服务器。

那么,服务器是如何指示的呢?表单元素需要一个 action 属性,它的值必须指定为服务器的 URL。它还需要一个 method 属性,在这里指定它用来向服务器传达数值的 HTTP 方法。

这个方法可以是 GETPOST。使用 GET 方法,当数据被提交时,用户输入的值在 URL 中是可见的。但是用 POST 方法,值是在 HTTP 头中发送的,所以这些值在 URL 中是不可见的。

如果表单中没有使用 method 属性,就会自动假定用户想使用 GET 方法,因为这是默认的。

那么,你应该在什么时候使用 GETPOST 方法?在提交非敏感数据或从服务器检索数据时使用 GET 方法(例如,在搜索期间),在提交文件或敏感数据时使用 POST 请求。

小项目:创建一个基本的联系表单

让我们把我们所学到的关于表单的知识,用来制作一个简单的联系表单。我还会在这个过程中引入一些新的概念来完善这一切。

这是 HTML:

<form action=example-server.com">
      <fieldset>
        <legend>Contact me</legend>
        <div class="form-control">
          <label for="name">Name</label>
          <input type="name" id="name" placeholder="Enter your name" required />
        </div>

        <div class="form-control">
          <label for="email">Email</label>
          <input
            type="email"
            id="email"
            placeholder="Enter your email"
            required
          />
        </div>

        <div class="form-control">
          <label for="message">Message</label>
          <textarea
            id="message"
            cols="30"
            rows="10"
            placeholder="Enter your message"
            required
          ></textarea>
        </div>
        <input type="submit" value="Send" class="submit-btn" />
      </fieldset>
</form>

这段 HTML 代码中发生了什么?

首先,一个 form 元素包裹着其他的元素。它的 action 设置为 ““example-server.com””,这是一个假的服务器,表单的数据将被接收。

form 元素之后,其他每个元素也被一个 fieldset 元素所包围,在它下面有一个 legend 标签。

我们用 fieldset 元素把相关的输入组合在一起,而 legend 标签包含一个注释,传达表单的内容。

nameemailtextarea 区域的输入都在一个 div 中,其类别为 form-control。所以它们的行为就像一个块状元素,以使 CSS 的样式设计更容易。

它们也是用 required 属性验证的,所以当这些字段是空的或者用户没有以适当的格式输入数值时,表单就无法提交。

做完这一切后,我们将得到下面的截图:

unstyledForm

这挺难看吧?我们需要应用一些样式!

CSS 是这样的:

body {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    font-family: cursive;
  }

 input,
    textarea {
    width: 100%;
    padding: 5px;
    outline: none;
  }

  label {
    line-height: 1.9rem;
  }

  input[type="submit"] {
   transform: translate(2.2%);
   padding: 3px;
   margin-top: 0.6rem;
   font-family: cursive;
   font-weight: bold;
  }

 fieldset {
   padding: 20px 40px;
 }

这里的 CSS 代码在做什么?

我们用 Flexbox 将正文中的所有内容在水平方向上居中,而在垂直方向上则用 100% 的视口高度。我们使用了 cursive 的字体。

我们给了输入和 textarea 100% 的宽度,这样它们就可以全部穿过。标签的最小行高为 1.9rem(30.4px),所以它们不会离各自的输入端太近。

我们用 transform 属性特别设计了按钮(输入类型为 button)的样式,把它推到中心,因为它有点偏离中心。我们给它加了一个 3px 的 padding,让它周围有更多的间距。然后我们为它选择了一个 cursive 字体,设置为黑体。

因为这个按钮离 textarea 太近了,我们设置了 0.6rem 的 margin-top,把它往下推了一点。

我们给 fieldet 元素在顶部和底部设置了 20px 的 padding,在左边和右边设置了 40px 的 padding,以推开它在它所包裹的 form 元素周围创建的边界。

在这一切结束后,我们就有了下面这个漂亮的表单:

styledForm

总结

我希望本教程能帮助你了解表单的工作原理。现在你应该掌握了将表单集成到你的网站所需的知识,这样你就可以开始收集数据了。

谢谢你阅读本文,继续编写代码吧!