了解HTML表单之form元素

天涯浪子 提交于 2020-02-01 02:59:21

表单是网页与用户的交互工具,由一个元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签

表单能够包含<input><menus><textarea><fieldset><legend><label>等表单控件元素

注意:表单里嵌套表单是不允许的

form元素

form元素有accept-charset、action、autocomplete、enctype、method、name、novalidate、target共8个属性,其中action和name属性为必需项

表单名称

name属性规定表单名称,如果name=“test”,则Javascript可以使用document.forms.test来获取该表单

<form method="get" action="form.php" name="test"></form>    
<script>
    var oForm = document.forms.test;
    console.log(oForm.method);//get
</script>
专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

字符集

accept-charset 属性是一个空格分隔的字符集列表,规定了服务器处理表单数据所接受的字符集。accept-charset 属性允许指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据。该属性的值是用引号包含字符集名称列表。如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待。此属性的默认值是 “unknown”,表示表单的字符集与包含表单的文档的字符集相同。在之前版本的HTML中,不同的字符编码可以用空格或逗号分隔。在HTML5中,只有空格可以允许作为分隔符

提交地址

action属性规定提交表单时,向何处发送表单数据;如果忽略这个属性,表单会重定向到表单所在的URL。这个值可以被 <button> 或者<input>元素中的 formaction属性重载(覆盖)

打开方式

target属性规定在何处打开action URL。共5个值*blank、*self、*parent、*top、framename。

数据编码

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。大多数情况下该属性不需要设置。这个值可以被 <button>或者 <input> 元素中的 formenctype属性重载(覆盖)。当 method属性值为 post时, enctype是提交form给服务器的内容的 MIME 类型 。可能的取值有:

application/x-www-form-urlencoded  在发送前编码所有字符(默认)

multipart/form-data  不对字符编码。在使用包含文件上传控件的表单时,必须使用该值

text/plain  空格转换为 “+” 加号,但不对特殊字符编码

数据发送

表单可以用两种方式(method)发送数据:GET和POST,默认为GET方法。这个值可以被 或者 元素中的 formmethod属性重载(覆盖)

POST方法

如果采用POST方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与action属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器

在服务器端,一旦POST样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数

【应用场景】

1、大数据处理,因为POST方法相比GET方法而言,处理更多字段

2、安全数据,因为GET方法将表单参数直接放在应用程序的 URL 中,这样网络窥探者可以很轻松地捕获它们,还可以从服务器的日志文件中进行摘录;而POST方法则没有这方面的漏洞

GET方法

如果采用GET方法,浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的action URL之后。这两者之间用问号进行分隔。

【应用场景】

1、获得最佳表单传输性能,因为GET发送只有少数简单字段

2、简单处理,因为GET方法无需处理编码解码方法

3、传参处理,因为GET方法允许把表单的参数包括进来作为 URL 的一部分

<h3>get方法</h3>
<form method="get" action="form.php" target = "_blank">
    <p><label>x:<input name="x"></label></p>
    <p><label>y:<input name="y"></label></p>
    <p><button type="submit">Submit</button></p>
</form>    
<a title="form.php?x=28&y=66" href="form.php?x=28&amp;y=66">a标签传参</a>
<h3>post方法</h3>
<form method="post" action="form.php"  target = "_blank">
    <p><label>x:<input name="x"></label></p>
    <p><label>y:<input name="y"></label></p>
    <p><button type="submit">Submit</button></p>
</form>    

//GET方法的URL显示为: http://127.0.0.1/form.php?x=1&y=2
//POST方法的URL显示为:http://127.0.0.1/form.php
<p>
<?php
if(isset($_REQUEST["x"]) && isset($_REQUEST["y"])){
    echo "x: " .$_REQUEST["x"] ."<br>";
    echo "y: " .$_REQUEST["y"];
}
?>    
</p>

自动完成

autocomplete是HTML5新增的一个属性,规定表单是否应该启用自动完成功能。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项

注意:IE浏览器不支持该属性,只有元素拥有name属性,该属性才有效

<form autocomplete="on | off"> //该属性默认为on,当设置为off时,规定禁用自动完成功能</pre>

<pre style="-webkit-tap-highlight-color: transparent; font-family: Courier, &quot;Courier New&quot;, monospace; display: block; padding: 1em; border: 2px solid rgb(221, 221, 221); border-radius: 4px; overflow-x: auto; line-height: 1.6; background: rgb(248, 248, 248);"><button id="btn1">打开自动完成</button>
<button id="btn2">关闭自动完成</button>
<form method="get" action="#" name="test">
    <p><label>x:<input name="x"></label></p>
    <p><label>y:<input name="y"></label></p>
    <p><button type="submit">Submit</button></p>    
</form>    
<script>
var oForm = document.forms.test;
btn1.onclick = function(){
    oForm.autocomplete = 'on';
};
btn2.onclick = function(){
    oForm.autocomplete = 'off';
};
</script>
专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

表单验证

novalidate是HTML5新增的一个属性,规定当提交表单时不对其进行验证

注意:IE9-不支持

<button id="btn1">打开验证</button>
<button id="btn2">关闭验证</button>
<form method="get" action="#" name="test">
    E-mail: <input type="email" name="user_email" />
    <input type="submit" />
</form>    
<script>
var oForm = document.forms.test;
btn1.onclick = function(){
    oForm.removeAttribute('novalidate');
};
btn2.onclick = function(){
    oForm.setAttribute('novalidate','');
};
</script>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!