內(nèi)容是《Web前端開發(fā)之Javascript視頻》的課件,請配合大師哥《Javascript》視頻課程學習。
在HTML中,表單是用<form>元素來表示的,它與其他各種各樣的表單輸入元素,如<input>、<select>和<button>在客戶端編程中有著重要的地位。
表單的作用是,通過表單元素收集用戶的輸入,再將這些輸入數(shù)據(jù)提交給服務(wù)器,服務(wù)器處理接收到的數(shù)據(jù)并生成一個新的HTML頁面顯示在客戶端;在以前,表單提交數(shù)據(jù)、服務(wù)器返回數(shù)據(jù),此時客戶端與服務(wù)端并沒有其他交互行為,因此,數(shù)據(jù)提交交互性差、服務(wù)器負擔重。
Javascript的最初的一個應(yīng)用,就是分擔服務(wù)器處理表單的任務(wù),打破處處依賴服務(wù)器的局面;雖然現(xiàn)在Web和Javascript有了長足的發(fā)展,但Web表單的變化并不明顯;特別是一些常見的形式,web表單并沒有提供特別好的方案;最常見的操作,是使用Javascript增強了一些標準表單控件的默認行為。
表單及其控件都是HTML元素,可以使用標準的DOM技術(shù)來操作它們,另外表單已經(jīng)腳本化了,也有專門的API,所以在表單編程中,最好使用表單API;
取得Form表單對象:
取得<form>元素引用的方式:最常用的方式就是將它看成與其他元素一樣,使用getElementById()或getElementsByTagName()等標準的DOM技術(shù);
var form = document.getElementById("myForm");
var form = document.getElementsByTagName("form")[0];
通過document.forms集合可以取得頁面中所有表單集合,在這個HTMLCollection集合中,可以通過數(shù)值索引或name或id值來取得特定的表單:
var firstForm = document.forms[0];
var myForm = document.forms["myForm"];
較早的瀏覽器或者那些支持向后兼容的瀏覽器中,會把每個設(shè)置了name特性的表單作為屬性保存在document對象中,如:
var form = document.myForm;
注:不推薦這種方式;
注:可以同時為表單指定id和name屬性,但它們可以設(shè)置不同的值;
表單屬性和方法:
表單<form>在HTML中具有action、encoding、method和target等屬性,在Javascript中,它是HTMLFormElement類型,繼承了HTMLElement,因而與其他HTML元素一樣具有相同的默認屬性,但也具有自己獨有的屬性和方法,其中大部分的屬性都與其在HTML中的屬性相對應(yīng),這些屬性可以控制表單是如何來提交數(shù)據(jù)并如何顯示的,如:
以上的大部分屬性是可寫的;
<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="設(shè)置表單" onclick="setFormInfo(this.form)" /></p>
<p><textarea id="txt"></textarea></p>
</form>
也可以使用DOM方法動態(tài)創(chuàng)建表單,如:
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是個例外,如果在文本區(qū)中回車會換行,而不是提交表單;
以這種方式提交表單時,瀏覽器會在將請求發(fā)送給服務(wù)器之前觸發(fā)onSubmit事件,利用此事件,可以驗證表單數(shù)據(jù),從決定是否允許表單提交;阻止這個事件的默認行為或返回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數(shù)據(jù)不能為空");
return false; // 或者
}
return true;
}
</script>
submit()方法:
在Javascript中,調(diào)用submit()方法也可以提交表單;而且,這種方式不需要表單包含提交按鈕,在任何時候都可以正常提交表單;
var myForm = document.getElementById("myForm");
myForm.submit();
在調(diào)用submit()方法提交表單時,并不會觸發(fā)onSubmit事件,因此在調(diào)用此方法之前驗證表單數(shù)據(jù);
<input id="btn" type="button" value="普通按鈕" />
var btn = document.getElementById("btn");
// 不會觸發(fā)myForm的onSubmit事件,所以數(shù)據(jù)驗證必須要處理
btn.addEventListener("click",function(e){
if(validate()){ // 數(shù)據(jù)驗證
console.log("普通按鈕提交");
myForm.submit();
}else{
console.log("不能為空");
}
},false);
另外,調(diào)用此方法也不會觸發(fā)約束驗證,如:
<p>輸入1-10之間的整數(shù):<input type="number" min="1" max="10" required /></p>
所以,也需要在調(diào)用submit()方法前驗證約束,如:
var num = document.querySelector('input[type="number"]');
if(num.required){
if(num.value == ""){
console.log("num不能為空");
return false;
}
}
有個誤區(qū),如果給一個提交按鈕添加onSubmit事件,是無效的,它會直接提交,如:
<input id="mySubmit" type="submit" value="提交" onsubmit="return validate();" />
如果為一個提交按鈕添加onClick事件,可以進行表單提交驗證,同時也會觸發(fā)表單的onSubmit事件,例如,把上例的btn的onClick事件處理程序添加到submit提交按鈕,可以看以,onClick事件先于表單的onSubmit事件觸發(fā);
另外,不要為一個表單元素的name或id的值設(shè)為submit,因為它會覆蓋表單的submit方法,所以當運行時,會提示不存在的submit()函數(shù);
另外,不僅是提交按鈕或普通按鈕調(diào)用submit()方法能提交表單,甚至一個超鏈接調(diào)用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中執(zhí)行javascript:void(0)
if(validate()){
console.log("超鏈接提交");
myForm.submit();
}else{
console.log("超鏈接提交數(shù)據(jù)驗證不通過");
}
}
示例:
<!-- 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("數(shù)據(jù)為空");
}
}
</script>
還有一種重要的提交方式,就是Ajax提交,也就是利用XMLHttpRequest對象進行異步數(shù)據(jù)提交,它最大的特點是不會提交整個頁面,只會進行局部提交。
自動提交和防止自動提交:
回車、調(diào)用提交按鈕的click()方法、調(diào)用表單的submit()方法(可以在onLoad事件中,甚至可以利用setTimeout定時提交)等;
如果表單中有提交按鈕,可以為表單添加onsubmit=”return false”;但此時,提交按鈕也會失效;
如果表單中沒有提交按鈕,不會自動提交;
如果表單中只有一個文本框,但沒有提交按鈕,回車會自動提交,可以為表單添加onsubmit=”return false”,就不會自動提交;或者添加一個隱藏的文本框,如:
<input type="text" style="display: none;" />
也不會自動提交,注意,不是隱藏域;
或者監(jiān)聽文本框的onKeydown事件,如果是回車的話,不做處理,如:
<input type="text" onkeydown="if(event.keyCode==13){return false}" />
如果在表單中有提交按鈕,如果表單任一個控件都處于焦點狀態(tài)下,直接回車就可以提交表單,如果沒有控件處于焦點狀態(tài),可以監(jiān)聽document的keydown事件,從而判斷是否按下回車鍵,再進行提交,如:
document.addEventListener("keydown", function(e){
if(e.keyCode == 13){
document.forms[0].submit();
console.log("表單提交了");
}
},false);
防止重復(fù)提交:
提交表單時可能出現(xiàn)的最大問題,就是重復(fù)提交表單;解決該問題的方法有兩個:在第一次提交表單后就禁用提交按鈕,或者利用onSubmit事件處理程序取消后續(xù)的表單提交操作;
禁用提交按鈕:
var myForm = document.getElementById("myForm");
myForm.addEventListener("submit", function(event){
event.preventDefault(); // 為了能看到效果
var btnSubmit = event.target.elements["btnSubmit"];
btnSubmit.disabled = true;
},false);
注:不能通過onclick事件處理程序來實現(xiàn)這個功能,原因是不同瀏覽器之間存在“時差”:有的會在觸發(fā)表單的onSubmit事件前觸發(fā)onClick事件,有些相反;對于先觸發(fā)onClick事件的,意味著會在提交發(fā)生之前禁用按鈕,結(jié)果永遠都不會提交表單,因此最好使用onSubmit事件來禁用提交按鈕;
此種方式不適合表單中不包含提交按鈕的情況;
重置表單:
使用type特性為reset的<input>或<button>兩種按鈕可以重置表單:
<input type="reset" value="重置">
<button type="reset">重置</button>
當單擊重置按鈕時,會觸發(fā)onReset事件;利用此事件,可以在必要時取消重置操作;取消重置也就是阻止重置的默認行為,如:
var myForm = document.getElementById("myForm");
myForm.addEventListener("reset", function(event){
event.preventDefault();
console.log("重置被禁止了");
},false);
在HTML事件處理程序或DOM0級中的onReset事件中返回false也可以取消默認行為;
也可以使用Javascript調(diào)用reset()方法重置,但與調(diào)用submit()方法不同,其會觸發(fā)onReset事件;
var myForm = document.getElementById("myForm");
myForm.reset();
//...
var btn = document.getElementById("btn");
btn.onclick = function(){
myForm.reset(); // 會觸發(fā)onReset事件
};
從用戶體驗角度來說,重置表單并不常見,所以有可能是意外地觸發(fā)了表單重置事件,所以這種需求是很少見的,更常見的做法是提供一個取消按鈕,讓用戶能夠回到前一個頁面;
表單元素(控件):
可以像訪問頁面中的其他元素一樣,使用原生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表單具有l(wèi)ength屬性,其返回表單元素的數(shù)量,但是不包含<input>元素type為“image”元素;所以也可以通過訪問表單的索引或?qū)傩詠碓L問元素,如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特性時結(jié)果有可能是不一樣的;一般來說,優(yōu)先使用id屬性,但是name屬性在HTML表單提交中有特殊的目的,一般應(yīng)用在相關(guān)的復(fù)選按鈕組和強制共享name屬性值的、互斥的單選按鈕組;另外,對于其他表單元素來說,設(shè)置name特性的目的就是為了提交到服務(wù)端,服務(wù)端根據(jù)該name特性取得這個表單元素的值;
共有的表單控件屬性:
除了<fieldset>元素外,所有表單控件都擁有相同的一組屬性;由于<input>類型可以表示多種表單元素,因此有些屬性只適用于某些表單元素,但還有一些屬性是所有表單元素所共有的:
以上除了form屬性,都可以通過Javascript動態(tài)修改,如:
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屬性可以動態(tài)修改,而<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()方法用于獲得焦點,即激活表單元素,使其可以響應(yīng)鍵盤事件,如:
window.onload = function(e){
document.forms[0].elements[0].focus();
}
默認情況下,只有表單元素可以獲得焦點;對于其他元素,可以設(shè)置其tabIndex設(shè)置為-1,然后再調(diào)用focus() 方法,也可以讓這些元素獲得焦點;
HTML5為表單控件新增了一個autofocus屬性,在支持這個屬性的瀏覽器中,只要設(shè)置這個屬性,不用Javascript就能自動把焦點轉(zhuǎn)移到相應(yīng)的控件上,如:
<input type="text" autofocus />
如果在HTML中已經(jīng)為元素設(shè)置這個屬性了,就不用在Javascript中調(diào)用focus()了,因此有必要在調(diào)用focus()之前先檢測是否設(shè)置了該屬性,如:
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()方法,它的作用是從元素中移走焦點;在調(diào)用blur()時,并不會把焦點轉(zhuǎn)移到某個特定的元素上,其僅僅是將焦點從調(diào)用這個方法的元素上面移走而已,如:
document.forms[0].elements[0].blur();
共有的表單元素事件:
當用戶與表單元素交互時它們往往會觸發(fā)鼠標、鍵盤或其他HTML等常規(guī)事件,除此之外,表單元素還支持以下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");
});
需要強調(diào)的是,change事件對于<input>和<textarea>元素,在它們失去焦點且value值改變時觸發(fā);對于<select>元素,在其選項改變時觸發(fā),如:
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");
});
當改變選項時,會觸發(fā)change事件,但此時,<select>仍處于焦點狀態(tài),當其失去焦點時,才會觸發(fā)blur事件,這一點,有<input>有很大區(qū)別;
事件處理程序中的this:
事件處理程序中的this是觸發(fā)該事件的元素的一個引用;例如,可以通過this.form來取得其所在的Form對象的引用;通過this.form.x來獲取該表單中其它的表單元素;
orm 對象
Form 對象代表一個 HTML 表單。
在 HTML 文檔中 <form> 每出現(xiàn)一次,F(xiàn)orm 對象就會被創(chuàng)建。
Form 對象集合
elements[] 包含表單中所有元素的數(shù)組。
elements 集合可返回包含表單中所有元素的數(shù)組。
元素在數(shù)組中出現(xiàn)的順序和它們在表單的HTML 源代碼中出現(xiàn)的順序相同。
每個元素都有一個 type 屬性,其字符串值說明了元素的類型。
formObject.elements[].property
<form id="myForm">
Firstname: <input id="fname" type="text" value="Mickey" />
Lastname: <input id="lname" type="text" value="Mouse" />
<input id="sub" type="button" value="Submit" />
</form>
<p>Get the value of all the elements in the form:<br />
<script type="text/javascript">
var x=document.getElementById("myForm");
for (var i=0;i<x.length;i++)
{
document.write(x.elements[i].value);
document.write("<br />");
document.write(x.elements[i].type);
document.write("<br />");
}
</script>
Form 對象屬性
acceptCharset 服務(wù)器可接受的字符集。
action 設(shè)置或返回表單的 action 屬性。
enctype 設(shè)置或返回表單用來編碼內(nèi)容的 MIME 類型。
id 設(shè)置或返回表單的 id。
length 返回表單中的元素數(shù)目。
method 設(shè)置或返回將數(shù)據(jù)發(fā)送到服務(wù)器的 HTTP 方法。
name 設(shè)置或返回表單的名稱。
target 設(shè)置或返回表單提交結(jié)果的 Frame 或 Window 名。
標準屬性
className 設(shè)置或返回元素的 class 屬性。
dir 設(shè)置或返回文本的方向。
lang 設(shè)置或返回元素的語言代碼。
title 設(shè)置或返回元素的 title 屬性。
Form 對象方法
reset() 把表單的所有輸入元素重置為它們的默認值。
submit() 提交表單。
Form 對象事件句柄
onreset 在重置表單元素之前調(diào)用。
onsubmit 在提交表單之前調(diào)用。
多數(shù)PHP程序都使用HTML表單從用戶那里獲取數(shù)據(jù)并計算結(jié)果。
首先創(chuàng)造一個基本的HTML大綱,包含表單控件;然后將控件進行合并(HTML表單必須包括一個提交按鈕,用戶單擊它可以將表單數(shù)據(jù)發(fā)送到服務(wù)器。)一個單獨的HTML頁面可以包含多個表單。
包含表單的HTML結(jié)構(gòu)和和普通的HTML結(jié)構(gòu)一樣。
<HTML>
<HEAD>
<TITLE>標題放在這</TITLE>
</HEAD>
<BODY>
表單頁面放在這
</BODY>
</HTML>
在包含表單的HTML頁面中可以使用任何HTML標簽。基本的表單使用FROM標簽來說明。該標簽中METHOD屬性接收GET或POST兩個值中的一個。ACTION屬性子明PHP腳本的url,該腳本可以收集通過表單收集的數(shù)據(jù),可以是絕對路徑或者相對路徑。
<FORM METHOD="method" ACTION="url">
中間可以放置表單控件
</FORM>
兩個常用的基本控件:文本框和提交按鈕。
文本框:允許用戶鍵入信息以發(fā)送給PHP腳本。NAME屬性為文本提供名稱,PHP腳本可以通過名稱準確訪問其內(nèi)容,因此它應(yīng)該是唯一的且符合PHP變量命名規(guī)則(但不需要$符號),單標簽。VALUE屬性指明出現(xiàn)在提交按鈕上面的標題。創(chuàng)建方式如下:
<INPUT TYPE = "TEXT" NAME="text">
提交按鈕:允許用戶將一個表單的內(nèi)容發(fā)送到服務(wù)器,一個HTML表單對應(yīng)應(yīng)該有一個提交按鈕。
示例:一個完整的HTML表單。
<HTML>
<HEAD>
<TITLE>標題</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
</FORM>
</BODY>
</HTML>
可以在一個HTML頁面中包含多個表單,注意下一個表單的FORM開始之前需要結(jié)束前一個FORM表單。
<HTML>
<HEAD>
<TITLE>標題</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
<BR/>
<BR/>
</FORM>
<FORM METHOD="POST" NAME="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name1">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email1">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data1">
</FORM>
</BODY>
</HTML>
文本框的屬性中,TYPE和NAME是必須的,其余是可選屬性。SIZE屬性用于設(shè)置文本框的可視大?。籑AXLENGTH指明用戶鍵入字符的最大長度;VALUE給出了一個最初顯示在文本框中的值。
<input type="text" name="" size="" maxlength="" value="">
文本區(qū)域可以輸入多行文本。NAME和ROWS屬性是必須的。ROWS屬性表明了文本區(qū)域內(nèi)可以看到的文本行數(shù),充滿時會滾動。COLS屬性指明可見文本列數(shù)與行數(shù)類似。WRAP屬性指明文本區(qū)域內(nèi)單詞換行的方式,可以指定如下值。該標簽為雙標簽。
值 | 說明 |
off | 禁止單詞換行但用戶可以輸入換行符強制換行 |
virtual/soft | 各行顯示為換行,但是換行并沒有被發(fā)送到服務(wù)器 |
physica/hard | 啟用了單詞換行 |
<inputarea name="" rows="" cols="" wrap="">
創(chuàng)建密碼框的語法與文本框相同,但要將TYPE屬性指定為PASSWORD而不是TYPE。
<input type="password" name="" size="" maxlength="" value="">
取兩個值中的一個,即二選一。TYPE屬性是必須的,checked屬性出現(xiàn),該復(fù)選框默認情況會被選定。value屬性指定復(fù)選框被選定情況下被發(fā)送到服務(wù)器的值,默認發(fā)送on值。法如下:
<input type="checkbox" name="" checked value="">
語法與復(fù)選框?qū)傩院x相同,但是TYPE屬性的值必須是RADIO,NAME屬性是必須的。
<input type="radio" name="" checked value="">
用戶可以選擇一個或者多個選項,它是一個滾動菜單。
<select name="" multipile size="">options go here</select>
name屬性是必須的,multipile屬性指明用戶可以通過按下crtl鍵并單擊多個選項來選擇它們
列表框的單選行為可作為單選按鈕。
<option selected value="text"></options>
<input type="hidden" name="text"value="">
<input type="FILE" name="name" accept="time" value="text">
其中type屬性是必須的。格式通過使用MIME碼指定。常用的格式如下:
超文本標記語言文本 .html,.html text/html
普通文本 :txt text/plain
word文檔:application/msword
RTF文本 :rtf application/rtf
GIF圖形 :gif image/gif
JPEG圖形 :jpeg,
jpg: image/jpeg
au聲音文件:au audio/basic
MIDI音樂文件 :mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
壓縮文件.rar application/octet-stream
壓縮文件.zip application/x-zip-compressed
TAR文件 .tar application/x-tar
<input type="image" src="url" name="text" align="align">
<input type="reset" value="text">
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。