整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          第63節 Form表單-Web前端開發之JavaScript-王唯

          內容是《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中的屬性相對應,這些屬性可以控制表單是如何來提交數據并如何顯示的,如:

          • acceptCharset:服務器能夠處理的字符集,等價于HTML中的accept-charset特性;
          • action:接受請求的URL,等價于HTML的action特性;
          • elements:表單中所有控件的集合(HTMLCollection);
          • enctype:請求的編碼類型(方式),等價于HTML中的enctype特性;
          • encoding:編碼,等價于HTML的encoding特性,不般不需要;
          • length:只讀,表單中控件的數量;
          • method:請求類型(方法),等價于HTML的method特性;
          • name:表單的名稱,等價于HTML的name特性;
          • target:用于發送請求和接收響應的窗口名稱,等價于HTML的target
          • reset():方法,將所有表單域重置為默認值;
          • submit():方法,提交表單;

          以上的大部分屬性是可寫的;

          <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>類型可以表示多種表單元素,因此有些屬性只適用于某些表單元素,但還有一些屬性是所有表單元素所共有的:

          • disabled:布爾值,表示當前控件是否被禁用;
          • form:只讀,指向當前控件所屬表單的指針;如果表單元素沒有包含在一個<form>中,則值為null;
          • name:只讀,當前控件的名稱;
          • readOnly:布爾值,表示當前控件是否只讀;
          • tabIndex:表示當前控件的切換(tab)序號;
          • type:當前控件的類型,如checkbox、radio等;
          • value:讀/寫,表單元素的值,也就是將被提交給服務器的值,對file來說,是只讀的,包含著文件在計算機中的路徑;

          以上除了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;對于其他元素,該值如下:

          • 文件域:<textarea> 值為textarea
          • 單選列表:<select>…</select> 值為:select-one
          • 多選列表:<select multiple>..</select> 值為:select-multiple
          • 自定義按鈕:<button>…</button> 值為:submit
          • 自定義非提交按鈕:<button type=“button”>..</button> 值為button
          • 自定義重置按鈕:<button type=“reset”>..</button> 值為reset
          • 自定義提交按鈕:<button type=“submit”>..</button> 值為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個事件:

          • blur:失去焦點時時觸發;
          • focus:獲得焦點時觸發;
          • change:對于<input>和<textarea>元素,在它們失去焦點且value值改變時觸發;對于<select>元素,在其選項改變時觸發;

          如:

          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就是用的這個軟件了,挺好用的,而且代碼提示特別方便,不用擔心太多的標簽和屬性記勞~

          1.什么是HTML?

          • HTML 是用來描述網頁的一種語言,指的是超文本標記語言: HyperText Markup Language;
          • HTML 不是一種編程語言,而是一種標記語言;
          • HTML文檔也叫做 web 頁面;

          2.HTML基本結構

          • <!DOCTYPE html>:文檔聲明;
          • <html>:HTML 頁面的根元素;
          • <head>:用于定義文檔的頭部,是所有頭部元素的容器;
          • <meta>:提供有關頁面的元信息,位于文檔的頭部,不包含任何內容;
          • <title>:文檔的標題;
          • <body>:定義文檔的主體,包含文檔的所有內容;

          3.HTML標簽使用?

          • HTML 標簽是由尖括號包圍的關鍵詞,且通常是成對出現的如<a></a>,當然也有單個的,只不過比較少如<hr>;
          • 標簽對中的第一個標簽表示開始標簽,第二個標簽表示結束標簽;

          4.HTML常用標簽介紹

          除了HTML基本結構的幾個標簽以外,HTML還有一些比較常用的基本標簽;

          (1)文本標簽:

          • h1-h6:用于定義標題,h1為最大標題,h6為最小標題;
          • p:定義段落;
          • span:組合文檔中的行內元素;
          • br:換行;
          • hr:水平線;
          • strong/b:加粗文字;
          • em/i:斜體;
          • u:下劃線;
          • s:刪除線;
          • pre:定義預格式化的文本,保持原有格式;
          • sub:下標;
          • sup:上標;
          • blockquote:塊引用;

          (2)布局標簽:

          • div:定義文檔中的分區或節,把文檔分割為獨立的、不同的部分;
          • header:定義頁面的頭部;
          • aside:用作文章的側欄;
          • section:定義文檔中的節;
          • footer:定義文檔或節的頁腳,通常包含文檔的作者、版權信息、使用條款鏈接、聯系信息等;
          • article:規定文章獨立的其他內容,如標題、內容、評論;

          (3)多媒體標簽:

          • img:用于在網頁中插入圖像;
          • audio:定義聲音,比如音樂或其他音頻流;
          • video:定義視頻,比如電影片段或其他視頻流;

          (4)超鏈接標簽:

          • a:定義超鏈接,指定頁面間的跳轉;

          (5)序列化標簽:

          • ul:定義無序列表;
          • ol:定義有序列表;
          • li:定義列表項目,可用在無序列表ul和有序列表ol中;
          • dl:定義了定義列表;
          • dt:定義了定義列表中的項目(即術語部分);
          • dd:在定義列表中定義條目的定義部分;

          (6)表格標簽:

          • table:定義 HTML 表格;
          • tr:定義表格的行;
          • td:定義表格的單元;
          • th:定義表頭;
          • caption:定義表格標題;
          • col:為表格中一個或多個列定義屬性值;
          • colgroup:用于對表格中的列進行組合,以便對其進行格式化;
          • thead:定義表格的表頭;
          • tbody:表格主體,也就是正文部分;
          • tfoot:定義表格的頁腳(腳注或表注);

          (7)表單標簽:

          • form:用于為用戶輸入創建 HTML 表單;
          • input:用于搜集用戶信息;
          • button:定義一個按鈕;
          • select:創建單選或多選菜單;
          • option:定義下拉列表中的一個選項;
          • textarea:定義多行的文本輸入控件;
          • label:為 input 元素定義標注(標記);
          • fieldset:用于將表單內的相關元素分組;
          • legend:為 fieldset 元素定義標題;

          5.HTML注意事項

          • HTML文件當以后綴名為 .html 或 .htm 來命名;
          • HTML標簽和屬性是不區分大小寫的,建議HTML標簽和屬性都小寫,屬性值必須用雙引號包圍;
          • HTML標簽都是以開始標簽起始,以結束標簽終止;
          • HTML標簽之間盡量縮進與換行,每行代碼不要過長,方便閱讀和維護;
          • HTML標簽使用必須符合標簽嵌套規則,如禁止a標簽嵌套a標簽,p標簽嵌套div標簽等;
          • 建議不使用HTML已經廢棄的或者不贊成使用的標簽,少使用table布局、iframe框架嵌套以及flash播放器;

          篇介紹了表單的使用,表單有很多控件,比如輸入框,密碼框、文本域,按鈕等。按類型可分如下:

          • 輸入類控件
          • 菜單類控件

          輸入類組件 —— input

          此類控件有很多種類型,使用<input type="類型">語法,常見類型如下:

          type 值

          含義

          text

          文字字段

          password

          密碼域,用戶看不到明文,以*代替

          radio

          單選按鈕

          checkbox

          多選按鈕

          button

          普通按鈕

          submit

          提交按鈕

          reset

          重置按鈕

          image

          圖像域,用圖像作為背景的提交按鈕

          hidden

          隱藏域,不可見的輸入框

          file

          文本域,用于上傳文件等非文本數據

          文本輸入框和密碼框

          除了顯示形式不一樣,其它屬性一樣,有以下屬性:

          • name —— 定義文字字段名稱,用于和其它控件區別,不能包含特殊字符,也不可使用html 標簽名稱
          • maxlength —— 定義文本框可輸入字符最大長度
          • size —— 定義文本框在頁面中顯示的長度
          • vaule —— 定義文本框中默認的值

          如下是文本輸入框和密碼框制作一個登錄表單

          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 還增加了多個新的輸入類型:

          • color
          • date
          • datetime
          • datetime-local
          • email
          • month
          • number
          • range
          • search
          • tel
          • time
          • url
          • week

          如下代碼:

          <!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文件,電子表格文件等,會以非文本方式傳送到后臺的,常用來實現文件上傳功能。

          文本域 —— textarea

          除了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 表單

          下篇: 前端入門 —— 網頁中使用窗口框架


          主站蜘蛛池模板: 无码人妻久久一区二区三区免费丨| 国产另类ts人妖一区二区三区| 国产精品无码不卡一区二区三区| 国产av福利一区二区三巨| 骚片AV蜜桃精品一区| 亚洲国产成人久久一区二区三区| 一区二区三区91| 精品无码一区二区三区在线| 亚洲国产精品第一区二区三区| 免费一区二区三区| 国产精品538一区二区在线| 国产精品无码AV一区二区三区| 国模大胆一区二区三区| 中文字幕永久一区二区三区在线观看| 最新欧美精品一区二区三区 | 亚洲片国产一区一级在线观看| 在线中文字幕一区| 日韩制服国产精品一区| 国产成人精品一区二三区熟女| 亚洲AV综合色区无码一区| 免费人妻精品一区二区三区| 一色一伦一区二区三区| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 无码一区二区三区| 国产在线视频一区二区三区 | 人妻少妇精品视频一区二区三区| 无码国产精品一区二区免费式直播| 亚洲高清一区二区三区 | 国模无码一区二区三区不卡| 亚洲av高清在线观看一区二区| 国产福利一区二区三区| 国产高清一区二区三区四区| 国内精品视频一区二区三区八戒| 91久久精品无码一区二区毛片| 亚洲国产高清在线一区二区三区| 蜜臀AV无码一区二区三区| 日韩免费无码视频一区二区三区 | 亚州AV综合色区无码一区| 蜜桃视频一区二区三区在线观看| 香蕉一区二区三区观| 亚洲第一区在线观看|