內容是《Web前端開發之Javascript視頻》的課件,請配合大師哥《Javascript》視頻課程學習。
在HTML中,表單是用<form>元素來表示的,它與其他各種各樣的表單輸入元素,如<input>、<select>和<button>在客戶端編程中有著重要的地位。
表單的作用是,通過表單元素收集用戶的輸入,再將這些輸入數據提交給服務器,服務器處理接收到的數據并生成一個新的HTML頁面顯示在客戶端;在以前,表單提交數據、服務器返回數據,此時客戶端與服務端并沒有其他交互行為,因此,數據提交交互性差、服務器負擔重。
Javascript的最初的一個應用,就是分擔服務器處理表單的任務,打破處處依賴服務器的局面;雖然現在Web和Javascript有了長足的發展,但Web表單的變化并不明顯;特別是一些常見的形式,web表單并沒有提供特別好的方案;最常見的操作,是使用Javascript增強了一些標準表單控件的默認行為。
表單及其控件都是HTML元素,可以使用標準的DOM技術來操作它們,另外表單已經腳本化了,也有專門的API,所以在表單編程中,最好使用表單API;
取得Form表單對象:
取得<form>元素引用的方式:最常用的方式就是將它看成與其他元素一樣,使用getElementById()或getElementsByTagName()等標準的DOM技術;
var form = document.getElementById("myForm");
var form = document.getElementsByTagName("form")[0];
通過document.forms集合可以取得頁面中所有表單集合,在這個HTMLCollection集合中,可以通過數值索引或name或id值來取得特定的表單:
var firstForm = document.forms[0];
var myForm = document.forms["myForm"];
較早的瀏覽器或者那些支持向后兼容的瀏覽器中,會把每個設置了name特性的表單作為屬性保存在document對象中,如:
var form = document.myForm;
注:不推薦這種方式;
注:可以同時為表單指定id和name屬性,但它們可以設置不同的值;
表單屬性和方法:
表單<form>在HTML中具有action、encoding、method和target等屬性,在Javascript中,它是HTMLFormElement類型,繼承了HTMLElement,因而與其他HTML元素一樣具有相同的默認屬性,但也具有自己獨有的屬性和方法,其中大部分的屬性都與其在HTML中的屬性相對應,這些屬性可以控制表單是如何來提交數據并如何顯示的,如:
以上的大部分屬性是可寫的;
<script>
console.log(form.action); // demo.html
form.action = "/login";
console.log(form.action); // login
// 獲取表單信息
function getFormInfo(){
var info;
var form = document.forms[0];
info = "form.elements:" + form.elements + "\n";
info += "form.length:" + form.length + "\n";
info += "form.name:" + form.name + "\n";
info += "form.acceptCharset:" + form.acceptCharset + "\n";
info += "form.action:" + form.action + "\n";
info += "form.enctype:" + form.enctype + "\n";
info += "form.encoding:" + form.encoding + "\n";
info += "form.method:" + form.method + "\n";
info += "form.target:" + form.target + "\n";
form.elements["txt"].value = info;
}
function setFormInfo(form){
form.name = "yourForm"
form.method = "GET";
form.action = "/member";
form.acceptCharset = "gb2312";
form.enctype = "multipart/form-data";
form.target = "_blank";
var pwd = document.createElement("input");
pwd.type = "password";
pwd.id = "pwd";
form.appendChild(pwd);
}
</script>
<form name="myForm" id="myForm" action="/login" method="POST">
<p><input type="text" id="username" name="username" /></p>
<p><input type="button" value="表單信息" onclick="getFormInfo()" />
<input type="button" value="設置表單" onclick="setFormInfo(this.form)" /></p>
<p><textarea id="txt"></textarea></p>
</form>
也可以使用DOM方法動態創建表單,如:
var form = document.createElement("form");
document.body.appendChild(form);
form.name = "myform";
form.action = "/login";
form.method = "POST";
// form.submit();
// 或者
var btn = document.createElement("input");
btn.type = "submit";
btn.value = "提交";
form.appendChild(btn);
Submit提交表單:
使用<input>的type特性為”submit”或”image”就可以提交表單,或者<button>也可以提交表單;
<input type="submit" value="提交" />
<input type="image" src="images/submit.png" />
<button type="submit">提交表單</button>
以上的按鈕,只要在任何表單元素擁有焦點的情況下,按回車就可以提交表單;如果表單里沒有提交按鈕,按回車鍵不會提交表單,但有個特例,如果只有一個文本框,即使沒有提交按鈕,回車也會提交;
注意:textarea是個例外,如果在文本區中回車會換行,而不是提交表單;
以這種方式提交表單時,瀏覽器會在將請求發送給服務器之前觸發onSubmit事件,利用此事件,可以驗證表單數據,從決定是否允許表單提交;阻止這個事件的默認行為或返回false就可以取消表單提交,如果不阻止,就是提交表單;
var myForm = document.getElementById("myForm");
myForm.addEventListener("submit", function(event){
var input = document.forms[0].elements[0];
if(input.value == ""){
event.preventDefault();
console.log("提交不了");
}
},false);
如果是DOM0級事件處理程序,也可以return false;
myForm.onsubmit = function(e){
var input = document.forms[0].elements[0];
if(input.value == ""){
console.log("input不能為空");
// e.preventDefault();
return false; // 或者
}
}
如果是HTML事件處理程序,可以return false;
<form id="myForm" name="myForm" onsubmit="return validate();">
<script>
function validate(){
var input = document.forms[0].elements[0];
if(input.value == ""){
console.log("input數據不能為空");
return false; // 或者
}
return true;
}
</script>
submit()方法:
在Javascript中,調用submit()方法也可以提交表單;而且,這種方式不需要表單包含提交按鈕,在任何時候都可以正常提交表單;
var myForm = document.getElementById("myForm");
myForm.submit();
在調用submit()方法提交表單時,并不會觸發onSubmit事件,因此在調用此方法之前驗證表單數據;
<input id="btn" type="button" value="普通按鈕" />
var btn = document.getElementById("btn");
// 不會觸發myForm的onSubmit事件,所以數據驗證必須要處理
btn.addEventListener("click",function(e){
if(validate()){ // 數據驗證
console.log("普通按鈕提交");
myForm.submit();
}else{
console.log("不能為空");
}
},false);
另外,調用此方法也不會觸發約束驗證,如:
<p>輸入1-10之間的整數:<input type="number" min="1" max="10" required /></p>
所以,也需要在調用submit()方法前驗證約束,如:
var num = document.querySelector('input[type="number"]');
if(num.required){
if(num.value == ""){
console.log("num不能為空");
return false;
}
}
有個誤區,如果給一個提交按鈕添加onSubmit事件,是無效的,它會直接提交,如:
<input id="mySubmit" type="submit" value="提交" onsubmit="return validate();" />
如果為一個提交按鈕添加onClick事件,可以進行表單提交驗證,同時也會觸發表單的onSubmit事件,例如,把上例的btn的onClick事件處理程序添加到submit提交按鈕,可以看以,onClick事件先于表單的onSubmit事件觸發;
另外,不要為一個表單元素的name或id的值設為submit,因為它會覆蓋表單的submit方法,所以當運行時,會提示不存在的submit()函數;
另外,不僅是提交按鈕或普通按鈕調用submit()方法能提交表單,甚至一個超鏈接調用submit()方法也可以提交,但要注意,需要取消超鏈接的默認行為:
<!-- <a href="javascript:void(0)" id="aBtn">提交</a> -->
<a href="#" id="aBtn">提交</a>
</form>
<script>
var aBtn = document.getElementById("aBtn");
aBtn.onclick = function(e){
e.preventDefault(); // 或者在HTML中執行javascript:void(0)
if(validate()){
console.log("超鏈接提交");
myForm.submit();
}else{
console.log("超鏈接提交數據驗證不通過");
}
}
示例:
<!-- onsubmit="return false" 防止表單自動提交
form 默認為get提交 -->
<form id="myForm" onsubmit="return false">
<p>用戶名:<input type="text" name="username" id="username" /></p>
<p>密碼:<input type="password" name="pwd" id="pwd" /></p>
<p><button type="button" onclick="login()">提交</button></p>
</form>
<script>
function login(){
var username = document.getElementById("username").value;
var pwd = document.getElementById("pwd").value;
if(username != "" && pwd !=""){
var myForm = document.forms["myForm"];
myForm.method = "get";
myForm.action = "/login";
myForm.submit();
}else{
console.log("數據為空");
}
}
</script>
還有一種重要的提交方式,就是Ajax提交,也就是利用XMLHttpRequest對象進行異步數據提交,它最大的特點是不會提交整個頁面,只會進行局部提交。
自動提交和防止自動提交:
回車、調用提交按鈕的click()方法、調用表單的submit()方法(可以在onLoad事件中,甚至可以利用setTimeout定時提交)等;
如果表單中有提交按鈕,可以為表單添加onsubmit=”return false”;但此時,提交按鈕也會失效;
如果表單中沒有提交按鈕,不會自動提交;
如果表單中只有一個文本框,但沒有提交按鈕,回車會自動提交,可以為表單添加onsubmit=”return false”,就不會自動提交;或者添加一個隱藏的文本框,如:
<input type="text" style="display: none;" />
也不會自動提交,注意,不是隱藏域;
或者監聽文本框的onKeydown事件,如果是回車的話,不做處理,如:
<input type="text" onkeydown="if(event.keyCode==13){return false}" />
如果在表單中有提交按鈕,如果表單任一個控件都處于焦點狀態下,直接回車就可以提交表單,如果沒有控件處于焦點狀態,可以監聽document的keydown事件,從而判斷是否按下回車鍵,再進行提交,如:
document.addEventListener("keydown", function(e){
if(e.keyCode == 13){
document.forms[0].submit();
console.log("表單提交了");
}
},false);
防止重復提交:
提交表單時可能出現的最大問題,就是重復提交表單;解決該問題的方法有兩個:在第一次提交表單后就禁用提交按鈕,或者利用onSubmit事件處理程序取消后續的表單提交操作;
禁用提交按鈕:
var myForm = document.getElementById("myForm");
myForm.addEventListener("submit", function(event){
event.preventDefault(); // 為了能看到效果
var btnSubmit = event.target.elements["btnSubmit"];
btnSubmit.disabled = true;
},false);
注:不能通過onclick事件處理程序來實現這個功能,原因是不同瀏覽器之間存在“時差”:有的會在觸發表單的onSubmit事件前觸發onClick事件,有些相反;對于先觸發onClick事件的,意味著會在提交發生之前禁用按鈕,結果永遠都不會提交表單,因此最好使用onSubmit事件來禁用提交按鈕;
此種方式不適合表單中不包含提交按鈕的情況;
重置表單:
使用type特性為reset的<input>或<button>兩種按鈕可以重置表單:
<input type="reset" value="重置">
<button type="reset">重置</button>
當單擊重置按鈕時,會觸發onReset事件;利用此事件,可以在必要時取消重置操作;取消重置也就是阻止重置的默認行為,如:
var myForm = document.getElementById("myForm");
myForm.addEventListener("reset", function(event){
event.preventDefault();
console.log("重置被禁止了");
},false);
在HTML事件處理程序或DOM0級中的onReset事件中返回false也可以取消默認行為;
也可以使用Javascript調用reset()方法重置,但與調用submit()方法不同,其會觸發onReset事件;
var myForm = document.getElementById("myForm");
myForm.reset();
//...
var btn = document.getElementById("btn");
btn.onclick = function(){
myForm.reset(); // 會觸發onReset事件
};
從用戶體驗角度來說,重置表單并不常見,所以有可能是意外地觸發了表單重置事件,所以這種需求是很少見的,更常見的做法是提供一個取消按鈕,讓用戶能夠回到前一個頁面;
表單元素(控件):
可以像訪問頁面中的其他元素一樣,使用原生DOM方法訪問表單控件;
var fields = document.getElementById("username");
var fields = document.getElementsByTagName("input")[0];
var fields = document.querySelectorAll('#login input[type="radio"]');
var fields = document.querySelectorAll('#login input[type="radio"][name="color"]');
Form表單具有length屬性,其返回表單元素的數量,但是不包含<input>元素type為“image”元素;所以也可以通過訪問表單的索引或屬性來訪問元素,如form[0]可以取得第一個表單控件或form[“color”] 或form.color獲得第一個命名控件;
console.log(myForm.length);
console.log(myForm[0]);
console.log(myForm["username"]);
console.log(myForm.username);
elements:表單中所有控件的集合(HTMLCollection);
var formElements = document.forms[0].elements;
console.log(formElements); // HTMLFormControlsCollection
console.log(formElements.length); // 5
其屬于HTMLFormControlsCollection集合類型,繼承自HTMLCollection;這個類型沒有什么特別的屬性和方法;
注意,elements集合中不包括type等于image的input元素;
可以通過表單elements集合索引或name特性訪問所有元素,如:
var form = document.getElementById("myForm");
var field1 = form.elements[0];
var field2 = form.elements["textbox1"];
var fields = form.elements.color;
var fieldCount = form.elements.length;
這種方式和直接利用表單的索引或name特性訪問表單元素是一致的,相比之下,還是推薦使用這種方式,因為前者在未來有可能不支持,并且會引起一些歧義;
示例,所有表單元素的值不能為空,如:
<script type="text/javascript">
function myCheck(){
for(var i=0;i<document.forms[0].elements.length-1;i++){
if(document.forms[0].elements[i].value==""){
alert("當前表單不能有空項");
document.forms[0].elements[i].focus();
return false;
}
}
return true;
}
</script>
<form name="myForm" method="post" action="#" onSubmit="return myCheck()">
用戶名:<input type="text" name="username"><br>
性別:<input type="text" name="sex"><br>
出生時間:<input type="text" name="birthday"><br>
<input type="submit" value="提交">
</form>
如果有多個表單控件使用同一個name,通過elements[“name”]會返回以該name命名的一個NodeList,而通過elements[index]只會返回第一個元素;
<form id="myForm">
<p>
<input type="radio" name="color" value="red" />red<br/>
<input type="radio" name="color" value="green" />red<br/>
<input type="radio" name="color" value="blue" />red<br/>
</p>
</form>
<script type="text/javascript">
var myForm = document.getElementById("myForm");
var colors = myForm.elements["color"];
// var colors = myForm.elements.color; // 或者
console.log(colors); // RadioNodeList
console.log(colors.length); // 3
var firstColor = colors[0];
var firstElement = myForm.elements[0];
console.log(firstColor === firstElement); // true
</script>
因此,在使用索引和name特性時結果有可能是不一樣的;一般來說,優先使用id屬性,但是name屬性在HTML表單提交中有特殊的目的,一般應用在相關的復選按鈕組和強制共享name屬性值的、互斥的單選按鈕組;另外,對于其他表單元素來說,設置name特性的目的就是為了提交到服務端,服務端根據該name特性取得這個表單元素的值;
共有的表單控件屬性:
除了<fieldset>元素外,所有表單控件都擁有相同的一組屬性;由于<input>類型可以表示多種表單元素,因此有些屬性只適用于某些表單元素,但還有一些屬性是所有表單元素所共有的:
以上除了form屬性,都可以通過Javascript動態修改,如:
var form = document.getElementById("myForm");
var field = form.elements[0];
field.value = "Another value";
alert(field.form === form);
field.focus();
field.disabled = true;
// 不推薦,但對input是可行的
field.type="checkbox";
type屬性:
除了<fieldset>之外,所有表單元素都有type屬性;對于<input>元素,這個值等于HTML特性type值,如:text、password、radio、checkbox、button、file、hidden、reset、submit;對于其他元素,該值如下:
此外,<input>和<button>的type屬性可以動態修改,而<select>元素的type屬性是只讀的;示例:密碼框的明文和暗文:
<style>
span.icon-eye{
display: inline-block; width:24px; height: 24px;
background: url("images/eye.png") no-repeat; cursor: pointer;
}
span.icon-eye-invisible{
background-position: -24px 0;
}
</style>
<p><input id="pwd" name="pwd" type="password" /><span class="icon-eye icon-eye-invisible"></span></p>
<script>
var iconEye = document.querySelector("span.icon-eye");
iconEye.addEventListener("click", function(event){
var p = document.getElementsByTagName("p")[0];
var pwd = document.getElementById("pwd");
if(p.classList.toggle("icon-eye-invisible")){
pwd.type = "text";
}else{
pwd.type = "password";
}
},false);
</script>
示例:在彈出窗口提交表單
<script>
function popupSend(oForm){
if(oForm.method && oForm.method.toLowerCase() !== "get"){
alert("只允許GET方式提交");
return;
}
var oField, sFieldType, nFile, sSearch = "";
for(var i = 0; i < oForm.elements.length; i++){
oField = oForm.elements[i];
if(!oField.hasAttribute("name"))
continue;
// sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.type.toUpperCase() : "TEXT";
if(sFieldType === "FILE"){
for(nFile = 0; nFile < oField.files.length; sSearch += "&" + escape(oField.name) + "=" + escape(oField.files[nFile++].name));
}else{
sSearch += "&" + escape(oField.name) + "=" + escape(oField.value);
}
}
open(oForm.action.replace(/(?:\?.*)?$/, sSearch.replace(/^&/, "?")), "submit-" + (oForm.name || Math.floor(Math.random() * 1e6)), "resizable=yes,scrollbars=yes,status=yes");
}
</script>
<form id="myForm" name="myForm" action="demo.php" method="get">
<p>First Name:<input type="text" name="firstname" /><br/>
Last Name:<input type="text" name="lastname" /><br/>
Password:<input type="password" name="pwd"><br/>
Photo:<input type="file" name="photo"><br/>
<input type="radio" name="sex" value="male">Male
<input type="radio" name="sex" value="female">Female</p>
<p><input type="checkbox" name="vehicle" value="Bike">自行車<br/>
<input type="checkbox" name="vehicle" value="Car">汽車</p>
<p><input type="submit" value="提交"></p>
</form>
<script>
var myForm = document.getElementById("myForm");
myForm.addEventListener("submit", function(e){
popupSend(this);
e.preventDefault();
})
</script>
共有的表單控件方法:
每個表單元素都有兩個方法:focus()和blur();其中,focus()方法用于獲得焦點,即激活表單元素,使其可以響應鍵盤事件,如:
window.onload = function(e){
document.forms[0].elements[0].focus();
}
默認情況下,只有表單元素可以獲得焦點;對于其他元素,可以設置其tabIndex設置為-1,然后再調用focus() 方法,也可以讓這些元素獲得焦點;
HTML5為表單控件新增了一個autofocus屬性,在支持這個屬性的瀏覽器中,只要設置這個屬性,不用Javascript就能自動把焦點轉移到相應的控件上,如:
<input type="text" autofocus />
如果在HTML中已經為元素設置這個屬性了,就不用在Javascript中調用focus()了,因此有必要在調用focus()之前先檢測是否設置了該屬性,如:
window.addEventListener("load", function(event){
var element = document.forms[0].elements[0];
if(element.autofocus !== true){
element.focus();
console.log("Js focus");
}
});
blur()方法:從元素中移除焦點;
與focus()方法相對的是blur()方法,它的作用是從元素中移走焦點;在調用blur()時,并不會把焦點轉移到某個特定的元素上,其僅僅是將焦點從調用這個方法的元素上面移走而已,如:
document.forms[0].elements[0].blur();
共有的表單元素事件:
當用戶與表單元素交互時它們往往會觸發鼠標、鍵盤或其他HTML等常規事件,除此之外,表單元素還支持以下3個事件:
如:
var textbox = document.forms[0].elements[0];
textbox.addEventListener("focus", function(event){
if(event.target.style.backgroundColor != "red"){
event.target.style.backgroundColor = "yellow";
}
});
textbox.addEventListener("blur", function(event){
if(/[\d]/.test(event.target.value)){
event.target.style.backgroundColor = "green";
}else{
event.target.style.backgroundColor = "red";
}
console.log("blur");
});
textbox.addEventListener("change", function(event){
if(/[\d]/.test(event.target.value)){
event.target.style.backgroundColor = "green";
}else{
event.target.style.backgroundColor = "red";
}
console.log("change");
});
需要強調的是,change事件對于<input>和<textarea>元素,在它們失去焦點且value值改變時觸發;對于<select>元素,在其選項改變時觸發,如:
var selectbox = document.forms[0].elements["mySelect"];
selectbox.addEventListener("change", function(event){
console.log(this.options[this.selectedIndex].value);
});
selectbox.addEventListener("blur", function(e){
console.log("select blur");
});
當改變選項時,會觸發change事件,但此時,<select>仍處于焦點狀態,當其失去焦點時,才會觸發blur事件,這一點,有<input>有很大區別;
事件處理程序中的this:
事件處理程序中的this是觸發該事件的元素的一個引用;例如,可以通過this.form來取得其所在的Form對象的引用;通過this.form.x來獲取該表單中其它的表單元素;
個人編寫HTML使用的軟件是dreamweaver,這個軟件的話,正版是要購買的,一開始學習HTML就是用的這個軟件了,挺好用的,而且代碼提示特別方便,不用擔心太多的標簽和屬性記勞~
除了HTML基本結構的幾個標簽以外,HTML還有一些比較常用的基本標簽;
(1)文本標簽:
(2)布局標簽:
(3)多媒體標簽:
(4)超鏈接標簽:
(5)序列化標簽:
(6)表格標簽:
(7)表單標簽:
篇介紹了表單的使用,表單有很多控件,比如輸入框,密碼框、文本域,按鈕等。按類型可分如下:
此類控件有很多種類型,使用<input type="類型">語法,常見類型如下:
type 值 | 含義 |
text | 文字字段 |
password | 密碼域,用戶看不到明文,以*代替 |
radio | 單選按鈕 |
checkbox | 多選按鈕 |
button | 普通按鈕 |
submit | 提交按鈕 |
reset | 重置按鈕 |
image | 圖像域,用圖像作為背景的提交按鈕 |
hidden | 隱藏域,不可見的輸入框 |
file | 文本域,用于上傳文件等非文本數據 |
文本輸入框和密碼框
除了顯示形式不一樣,其它屬性一樣,有以下屬性:
如下是文本輸入框和密碼框制作一個登錄表單
html代碼:
<!DOCTYPE html>
<html>
<body>
<h1>用戶登錄</h1>
<form action="/demo/html/action_page.php">
<label for="fname">用戶名:</label><br>
<input type="text" id="username" name="username" value=""><br>
<label for="lname">密碼:</label><br>
<input type="password" id="pwsd" name="pwsd" value=""><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
顯示效果:
HTML5 輸入類型
除了以上幾種類型,HTML5 還增加了多個新的輸入類型:
如下代碼:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
數字類型(1 到 5 之間):
<input type="number" name="quantity" min="1" max="5">
IE9 及早期版本不支持 type="number"。<br>
color 選擇顏色:
<input type="color" name="color"><br>
生日:
<input type="date" name="bday"><br>
年月:
<input type="month" name="bdaymonth"><br>
年周:
<input type="week" name="week_year"><br>
時間:
<input type="time" name="usr_time"><br>
一定范圍
<input type="range" name="points" min="0" max="10"><br>
E-mail:
<input type="email" name="email">
能夠在被提交時自動對電子郵件地址進行驗證<br>
搜索:
<input type="search" name="googlesearch"><br>
電話:
<input type="tel" name="usrtel">
目前只有 Safari 8 支持 tel 類型。<br>
url:
<input type="url" name="url">
提交時能夠自動驗證 url 字段<br>
<input type="submit">
</form>
</body>
</html>
效果如下:
單選和多選按鈕
使用 type = “radio” 和 type =“checkbox” 定義是單選還是多選,除了name和value屬性外,單選和多選都有一個 checked屬性定義默認選擇的項,checked = “true”指選中那個選項,表單會將 checked = “true” 的選型值傳遞給后臺。
如下實例:
<!DOCTYPE html>
<html>
<body>
<h4>單選和多選</h4>
<form action="/demo/demo_form.asp">
水果:
<input type="radio" name="shuiguo" value="banner" checked> 香蕉
<input type="radio" name="shuiguo" value="apple"> 蘋果
<br><br>
省份:
<input type="checkbox" name="shengfen" value="shannxi" checked> 陜西
<input type="checkbox" name="shengfen" value="sanxi"> 山西
<input type="checkbox" name="shengfen" value="gdong"> 廣東
<br><br>
<input type="submit">
</form>
</body>
</html>
顯示效果:
單選和多選傳遞給后臺的數據是不一樣的,如下會看到地址欄中的數據,多選會發送多個值,后臺將會獲取一個數組形式的數據。
/demo/demo_form.asp?shuiguo=banner&shengfen=shannxi&shengfen=sanxi
普通按鈕、提交按鈕、重置按鈕
普通按鈕:type = “button”,一般配合腳本使用,語法如下:
<input type="button" name="名稱" value="按鈕值" onclick="腳本程序" />
value 值就是按鈕在頁面顯示的文字,onclick屬性定義了腳本事件,這里指單擊按鈕時所進行的處理。
如下示例:
<!DOCTYPE html>
<html>
<body>
<form>
<input type="button" value="普通按鈕">
<input type="button" value="打開窗口" onclick="window.open()">
<input type="button" value="您好" onclick="alert('您好')">
</form>
</body>
</html>
單擊您好按鈕
提交按鈕:type = “submit”,用于提交表單內容,是一種特殊按鈕。
如剛才的登錄表單,提交后會返回結果:
重置按鈕:type="reset",用于清除表單數據,也是一種特殊按鈕。
輸入數據
點擊重置按鈕后,表單數據清空
重置清空數據
HTML5 按鈕
除了使用input定義按鈕,還可以使用 html5 新增的<button> 標簽定義按鈕,button 使用語法如下:
<form action="/demo/html/action_page.php">
<button type="button">普通按鈕</button>
<button type="submit">提交按鈕</button>
</form>
其它輸入類控件
隱藏域 —— hidden
文件域 —— file
如下示例:
<form action="/demo/html/action_page.php">
<label for="fname">隱藏域:</label>
<input type="hidden" id="hidden" name="hidden" value=""><br>
<label for="lname">文件域:</label>
<input type="file" id="file" name="file" value=""><br>
<input type="submit" value="提交">
</form>
顯示效果
可以看到,隱藏域在頁面中不顯示,單擊文件域選擇文件按鈕可以選擇文件,比如word文件,電子表格文件等,會以非文本方式傳送到后臺的,常用來實現文件上傳功能。
除了input 類型的控件,還有文本域 textarea ,一種特殊的文本框,它與input 文本輸入框的區別就是可以輸入多行文字,input 文本輸入框是單行的無法輸入多行文字。
如下示例:
<p>textarea 元素定義多行輸入字段。</p>
<form action="/demo/html/action_page.php">
<textarea name="message" rows="10" cols="30">The cat was playing in the garden.</textarea>
<br><br>
<input type="submit">
</form>
效果如下:
rows 屬性定義文本域的高度是幾行,cols 定義文本域寬度占幾列,比如上面定義了高10行寬30列的文本域。
下拉菜單作用和單選按鈕類似,只不過它更加節省空間,當要選擇的選型很多時,就不適合使用radio空間,所以當選項很多的時候,使用下拉菜單,語法如下:
<select name="名稱">
<option value="選項值1" selected>選項1</option>
<option value="選項值2">選項3</option>
更多option......
</select>
多選列表和多選按鈕類似,一樣為了節省空間,當數據選項比較多時,使用多選列表,語法如下:
<select name="名稱" size="可看見的列表項數" multiple>
<option value="選項值1" selected>選項1</option>
<option value="選項值2">選項3</option>
更多option......
</select>
多選比下拉菜單不同之處是多了一個multiple屬性,定義多選的,且表現形式也不一樣,不是下拉而是一個列表。
如下代碼:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
下拉菜單:<br>
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br>
多選列表:<br>
<select name="cars" size="3" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><br>
<input type="submit">
</form>
</body>
</html>
顯示效果:
這里需要注意的是,多選列表多選時需要按住ctrl鍵同時鼠標單擊選擇才能多選,效果如下:
到這里,已介紹了大部分的表單控件,現在你可以使用他們制作自己的表單,表單通常在動態網站中使用,這為以后制作動態網站打下基礎。
還有許多屬性沒有講到,比如html5新增的一些屬性和功能,可自行參考 w3cshool 等網站學習,感謝關注,學習愉快!
上篇 : 前端入門——html 表單
下篇: 前端入門 —— 網頁中使用窗口框架
*請認真填寫需求信息,我們會在24小時內與您取得聯系。