整合營銷服務商

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

          免費咨詢熱線:

          HTML表單及其Input輸入類型

          TML 表單用于搜集不同類型的用戶輸入。HTML5 Input,擁有多個新的表單輸入類型,提供了更好的輸入控制和驗證,今天將為大家帶來HTML中的表單及其input輸入類型。

          一、HTML表單

          1、HTML表單用于收集不同類型的用戶輸入,是一個包含表單元素的區域并且允許用戶在表單中輸入內容,比如文本域(textarea)、下拉列表、單選框(radio=buttons)、復選框(checkboxes)等。

          2、表單使用標簽<form>來設置,示例:

          運行結果:

          二、HTML表單屬性:

          1、HTML表單包含表單元素,表單元素是指不同類型的input元素、復選框、單選按鈕、提交按鈕等。

          2、action屬性

          在上面的示例中出現了action屬性,action屬性定義在提交表單執行的動作,向服務器提交表單的通常做法是使用提交按鈕。

          通常,表單會被提交到web服務器上的網頁,上面的例子中,則指定了某個服務器腳本來處理被提交表單。

          如果省略 action 屬性,則 action 會被設置為當前頁面。

          3、method 屬性

          method屬性規定在提交表單時所用的 HTTP 方法(GET 或 POST):

          如果表單提交是被動的(比如搜索引擎查詢),并且沒有敏感信息,使用get。

          如果表單正在更新數據,或者包含敏感信息(例如密碼),使用post。

          4、如果要正確地被提交,每個輸入字段必須設置一個 name 屬性,示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form action="/demo/demo_form.asp">

          First name:<br>

          <input type="text" name="Firstname" value="Mickey">

          <br>

          Last name:<br>

          <input type="text" name="lastname" value="Mouse">

          <br><br>

          <input type="submit" value="Submit">

          </form>

          <p>如果您點擊提交,表單數據會被發送到名為 demo_form.asp 的頁面。</p>

          <p>first name 不會被提交,因為此 input 元素沒有 name 屬性。</p>

          </body>

          </html>

          運行結果:

          5、target 屬性

          target 屬性規定提交表單后在何處顯示響應,target 屬性可設置以下值之一:

          默認值為 _self,這意味著響應將在當前窗口中打開。

          6、Autocomplete 屬性

          autocomplete 屬性規定表單是否應打開自動完成功能。

          啟用自動完成功能后,瀏覽器會根據用戶之前輸入的值自動填寫值,示例:

          運行結果:


          7、所有<form>屬性的列表:


          三、HTML表單元素:

          1、<input>元素是最重要的表單元素,有很多的形態,根據不同的type屬性,例如:

          ① 文本輸入(text),示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form>

          First name:<br>

          <input type="text" name="firstname">

          <br>

          Last name:<br>

          <input type="text" name="lastname">

          </form>

          <p>請注意表單本身是不可見的。</p>

          <p>同時請注意文本字段的默認寬度是 20 個字符。</p>

          </body>

          </html>

          運行結果:

          ② 單選按鈕輸入(radio),示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form>

          <input type="radio" name="sex" value="male" checked>Male

          <br>

          <input type="radio" name="sex" value="female">Female

          </form>

          </body>

          </html>

          運行結果:

          ③ 提交按鈕(submit),示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form action="/demo/demo_form.asp">

          First name:<br>

          <input type="text" name="firstname" value="Mickey">

          <br>

          Last name:<br>

          <input type="text" name="lastname" value="Mouse">

          <br><br>

          <input type="submit" value="Submit">

          </form>

          <p>如果您點擊提交,表單數據會被發送到名為 demo_form.asp 的頁面。</p>

          </body>

          </html>

          運行結果:

          2、<select>元素

          <select>元素定義下拉列表,示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form action="/demo/demo_form.asp">

          <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>

          <input type="submit">

          </form>

          </body>

          </html>

          運行結果:

          3、<fieldset>元素

          <fieldset>元素組合表單中的相關數據

          <legend>元素為<fieldset>元素定義標題,示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form action="/demo/demo_form.asp">

          <fieldset>

          <legend>Personal information:</legend>

          First name:<br>

          <input type="text" name="firstname" value="Mickey">

          <br>

          Last name:<br>

          <input type="text" name="lastname" value="Mouse">

          <br><br>

          <input type="submit" value="Submit">

          </fieldset>

          </form>

          </body>

          </html>

          運行結果:

          4、<textarea> 元素

          <textarea> 元素定義多行輸入字段(文本域)、示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form>

          <textarea name="message" rows="10" cols="30">

          The cat was playing in the garden.

          </textarea>

          </form>

          </body>

          </html>

          運行結果:

          5、HTML5<datalist>元素

          <datalist> 元素為 <input> 元素規定預定義選項列表。

          用戶會在他們輸入數據時看到預定義選項的下拉列表。

          <input> 元素的 list 屬性必須引用 <datalist> 元素的 id 屬性,示例:

          <!DOCTYPE html>

          <html>

          <body>

          <form action="/demo/demo_form.asp">

          <input list="browsers" name="browser">

          <datalist id="browsers">

          <option value="Internet Explorer">

          <option value="Firefox">

          <option value="Chrome">

          <option value="Opera">

          <option value="Safari">

          </datalist>

          <input type="submit">

          </form>

          </body>

          </html>

          運行結果:

          四、HTML表單輸入類型

          輸入類型

          定義

          text

          定義供文本輸入的單行輸入字段

          password

          定義密碼字段

          submit

          定義提交表單數據至表單處理程序的按鈕

          radio

          定義單選按鈕

          checkbox

          定義復選框

          <input>中的type:

          類型

          定義

          radio

          定義單選按鈕

          checkbox

          定義復選框

          button

          定義按鈕

          number

          用于應該包含數字值的輸入字段

          date

          用于應該包含日期的輸入字段

          color

          用于應該包含顏色的輸入字段

          range

          用于應該包含一定范圍內的值的輸入字段

          month

          允許用戶選擇月份和年份

          week

          允許用戶選擇周和年

          time

          允許用戶選擇時間(無時區)

          datetime

          允許用戶選擇日期和時間(有時區)

          datetime-local

          允許用戶選擇日期和時間(無時區)

          email

          用于應該包含電子郵件地址的輸入字段

          search

          用于搜索字段(搜索字段的表現類似常規文本字段)

          tel

          用于應該包含電話號碼的輸入字段

          url

          用于應該包含 URL 地址的輸入字段


          輸入限制:

          這就是有關HTML表單的大概內容了,希望這篇HTML的表單及其input輸入類型的知識點能對大家有所幫助。

          篇文章主要的向大家介紹了關于html input標簽的單選按鈕的使用方法,還有關于HTML input標簽的單選默認按鈕的做法。接下來我們一起來看看這篇文章吧

          首先我們介紹的是在html input標簽中的單選按鈕的做法:

          <input> 標簽用于搜集用戶信息。根據不同的type屬性值,輸入字段擁有很多種形式。輸入字段可以是文本字段、復選框、掩碼后的文本控件、單選按鈕、按鈕等等。

          話不多說,上代碼實例:

          > <form action="form_action.asp" method="get">
          > 
          > <input type="radio" name="radio" value="1">單選1
          > 
          > <input type="radio" name="radio" value="2">單選2
          > 
          > <input type="radio" name="radio" value="3">單選3
          > 
          > <input type="radio" name="radio" value="4">單選4
          > 
          > </form>

          這個的效果很容易看到,我們還是先看看瀏覽器中的顯示效果吧:



          這個效果一眼就能看到,很簡單的一個代碼

          還有種是很多網站上都是經常見到的,比如:單選性別,這個基本上都是用這種單選框去制作的。代碼如下:

          HTML中的單選按鈕實現男女性別選擇,不讓男女同是都能都能選擇,實現方法:在按鈕的屬性里寫一個name屬性,并且把name的值設置成相同的

          > <input id="man" type="radio" checked="checked" name="1" />男
          > 
          > <input id="woman" type="radio" name="1"/>女

          這個就不給圖了,比上面那個還簡單,就兩個單選框,我們經常遇到的這個。

          現在來說說HTML單選框按鈕怎么默認選中:

          首先我們先把第一個實例拿出來繼續說,我們只需要在其中加一個屬性,如下:

          > <form action="form_action.asp" method="get">
          > 
          > <input type="radio" name="radio" value="1">單選1
          > 
          > <input type="radio" name="radio" value="2" checked>單選2
          > 
          > <input type="radio" name="radio" value="3">單選3
          > 
          > <input type="radio" name="radio" value="4">單選4
          > 
          > </form>

          效果依舊很明顯,看效果圖:



          這上面我沒做任何的點擊,自己出現在那上面的,刷新過后還能看到在單選2上面。

          我們就可以看到,這樣就把單選框給默認選中了,大家可以自己試試,多敲敲代碼。

          好了,以上就是這篇關于html input標簽做單選按鈕的文章了,有問題的可以在下方提問。

          以上就是html單選按鈕默認選中怎么做?input標簽的單選按鈕用法實例的詳細內容,更多請關注我!!!

          我自己是一名從事了多年開發的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年我花了一個月整理了一份最適合2020年學習的web前端學習干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關注我的頭條號并在后臺私信我:前端,即可免費獲取。

          內容是《Web前端開發之Javascript視頻》的課件,請配合大師哥《Javascript》視頻課程學習。

          按鈕Button:
          按鈕是最常用的表單元素之一,有兩種形式的按鈕,button按鈕和radio單選、checkbox復選按鈕;
          提交和重置元素本身就是按鈕,并且有相關聯的默認動作,如果其click事件處理程序返回false,也就取消它的默認行為了;也可以使用它們的click事件來執行表單的驗證及提交,但最為常用的還是使用form對象本身的submit事件進行驗證和提交;
          普通按鈕是沒有默認行為的,一般來說使用它們來執行自定義腳本,當然也可以用它來執行form.submit()方法來提交表單;
          對于type為”submit”或type=”image”的按鈕,HTML5新增了formaction、formmethod、formenctype、formtarget屬性,其中formaction屬性用于覆蓋form的 action屬性,作用是為不同的提交按鈕增加formaction屬性,使得在單擊時可以將表單提交給不同的頁面;formmethod屬性為每個不同的提交按鈕分別指定不同的提交方法;formenctype屬性為每個不同的提交按鈕分別指定不同的編碼方式;formtarget屬性用于為每個不同的提交按鈕指定在何處打開提交頁面;這些屬性在Javascript中都有相對應的同名屬性,如:

          <form action="demo.php">
              <input type="submit" formaction="center/" formmethod="GET" formtarget="_blank" formenctype="multipart/form-data" value="用戶中心" />
              <input type="submit" formaction="admin/" formmethod="POST" formaction="_self" formenctype="application/x-www-form-urlencoded" value="后臺管理" />
          </form>
          <script>
          var btnSubmit = document.forms[0].elements[0];
          console.log(btnSubmit.formAction);
          console.log(btnSubmit.formMethod);
          console.log(btnSubmit.formTarget);
          console.log(btnSubmit.formEnctype);
          </script>

          radio單選和checkbox復選按鈕(框)是開關按鈕,其只有兩種狀態:選中或未選中;

          <form id="myForm" name="myForm">
          <p>性別:
          <input type="radio" name="sex" id="male" value="1" />男
          <input type="radio" name="sex" id="remale" value="0" checked />女
          </p>
          <p>課程:
          HTML<input type="checkbox" name="course" id="c1" value="HTML" />
          CSS<input type="checkbox" name="course" id="c2" value="CSS" checked />
          JavaScript<input type="checkbox" name="course" id="c3" value="JavaScript" />
          </p>
          </form>
          <script>
          var male = document.getElementById("male");
          console.log(male); // <input>
          male = document.forms["myForm"].elements["male"];
          console.log(male);  // <input>
          </script>

          單選和復選按鈕都定義了checked屬性,該屬性為可讀寫的布爾值;defaultChecked屬性對應的是HTML的checked屬性,也是布爾值,它指定了元素在第一次加載頁面時是否選中;

          var male = document.forms["myForm"].elements["male"];
          var remale = document.forms["myForm"].elements["remale"];
          console.log(male.checked);  // false
          console.log(male.defaultChecked);  // false
          console.log(remale.checked);  // true
          console.log(remale.defaultChecked);  // true
          male.checked = true;
          console.log(male.checked);  // true
          console.log(male.defaultChecked);  // false
          console.log(remale.checked);  // false
          console.log(remale.defaultChecked);  // true
          male.defaultChecked = true;
          console.log(male.checked);  // true
          console.log(male.defaultChecked);  // true
          console.log(remale.checked);  // false
          console.log(remale.defaultChecked);  // true

          checked會令一個單選按鈕組中所有元素互斥,defaultChecked也是可寫的(W3C定義其是只讀的,所以寫入的操作是不規范的),但它不是互斥的;所以可以利用這兩個屬性把單選按鈕恢復到默認的狀態,如:

          male.checked = true;
          male.checked = male.defaultChecked; 
          remale.checked = remale.defaultChecked;

          對于復選框,也是類似的,但其checked不是互斥的,因為它本身就允許多選;
          例如:復位單選和復選狀態;

          <p><input type="button" value="重置單選和復選" id="resetRadioCheckbox" /></p>
          <script>
          var resetRadioCheckbox = document.getElementById("resetRadioCheckbox");
          resetRadioCheckbox.onclick = function(){
              // var radioList = document.querySelectorAll('input[type="radio"]');
              var radioList = document.getElementsByName("sex"); // 也可以
              console.log(radioList);
              for(var i=0,len=radioList.length; i<len; i++)
                  radioList[i].checked = radioList[i].defaultChecked;
              
              var checkList = document.getElementsByName("course");
              for(var i=0,len=checkList.length; i<len; i++)
                  checkList[i].checked = checkList[i].defaultChecked; 
          }
          </script>

          單選和復選按鈕本身并不顯示任何文本,它們通常和相鄰的HTML文本一起顯示或與<label>元素相關聯,所以其value屬性并不顯示出來,而只是為了提交給服務端;

          var radioList = document.getElementsByName("sex");
          for(var i=0,len=radioList.length; i<len; i++){
              if(radioList[i].checked)
                  console.log("被選中的值是:" + radioList[i].value);
          }
          var checkList = document.getElementsByName("course");
          var checkStr = "";
          for(var i=0,len=checkList.length; i<len; i++){
              if(checkList[i].checked)
                  checkStr += checkList[i].value + ",";
          }
          if(checkStr != "")
              checkStr = checkStr.substring(0,checkStr.length - 1);
          else
              checkStr = "無";
          console.log("被選中的值是:" + checkStr);

          同時,也會根據獲取來的值來設置單選或復選按鈕的選中狀態,如:

          window.onload = function(){
              var sexValue = 1; // 從服務端獲取
              var radioList = document.getElementsByName("sex");
              for(var i=0,len=radioList.length; i<len; i++){
                  if(radioList[i].value == sexValue){
                      radioList[i].checked = true;
                      break;
                  }
              }
              var courseValue = "JavaScript,HTML";  // 從服務端獲取
              var arrCourse = courseValue.split(",");
              var checkList = document.getElementsByName("course");
              for(var i=0,len=checkList.length; i<len; i++){
                  // if(arrCourse.indexOf(checkList[i].value) >= 0) // 或者
                  if(arrCourse.includes(checkList[i].value))
                      checkList[i].checked = true;
                  else
                      checkList[i].checked = false;
              }
          }

          其往往成組并使用共享的name,如果使用共享的name獲取這些元素時,返回是一個類數組而不是單個元素;

          <script>
          var sex = document.getElementsByName("sex");
          console.log(sex);  // NodeList
          var sex = document.forms["myForm"].elements["sex"];
          console.log(sex);  // RadioNodeList
          </script>

          使用elements集合,返回的類型是更具體的RadioNodeList,該類型擁有一個value屬性,返回單選按鈕組中選中的value值;該屬性是可讀寫的,在設置value屬性時,value屬性等于值的第一個單選按鈕元素將被設置為checked,如:

          console.log(sex.value);  // 0
          sex.value = "1";  // 男就被選中的
          console.log(sex.value);

          radio單選按鈕的本意就是在一組單選按鈕組中只能選擇唯一一個,如果只有一個radio按鈕,是沒有多大實際意義的;即使如此,如果使用elements屬性,其返回的就不是NodeList,而是單個元素對象;

          <p><input type="radio" id="single" name="single" value="單個按鈕" /></p>
          </form>
          <script>
          var single = document.forms[0].elements["single"];
          console.log(single);  // <input>
          single.checked = true;
          console.log(single.checked);
          console.log(single.defaultChecked);
          console.log(single.value);  // 單個按鈕
          </script>

          在獲取checkbox時,如:

          var courses = document.getElementsByName("course");
          console.log(courses);  // NodeList<input>
          var courses = document.forms["myForm"].elements["course"];
          console.log(courses); // RadioNodeList<input>

          雖然當前為checkbox組,并不是radio組,但返回的也是RadioNodeList,并不是類似的CheckboxNodeList類型,而且也不存在這個類型;
          其返回的RadioNodeList集合的value屬性無用;獲取所有選中復選按鈕的值,可以遍歷所有被選中的選項;

          當單擊單選或復選按鈕時,會觸發onclick事件,如果單擊時改變了開關按鈕的狀態,也會觸發change事件;

          var sexList = document.forms[0].elements["sex"];
          for(var i=0,len=sexList.length; i<len; i++){
              var sex = sexList[i];
              sex.addEventListener("change", function(event){
                  console.log(event.target.checked);
                  console.log(event.target.defaultChecked);
              });
          }
          var courseList = document.forms[0].elements["course"];
          var log = document.getElementById("log");
          var arrCourse = [];
          for(var i=0,len=courseList.length; i<len; i++){
              if(courseList[i].checked)
                  arrCourse.push(courseList[i].value);
          }
          console.log(arrCourse.join());
          log.innerText = arrCourse.join();
          for(var i=0,len=courseList.length; i<len; i++){
              var course = courseList[i];
              course.addEventListener("change", function(event){
                  if (event.target.checked) {
                      arrCourse.push(event.target.value);
                  }else{
                      arrCourse.splice(arrCourse.indexOf(event.target.value),1);
                  }
                  console.log(arrCourse.join());
                  log.innerText = arrCourse.join();
              },false);
          }

          示例:全選:

          <p>
          HTML<input type="checkbox" name="course" value="HTML" />
          CSS<input type="checkbox" name="course" value="CSS" />
          JavaScript<input type="checkbox" name="course" value="JavaScript" />
          </p>
          <p><button id="all">全選</button>
              <button id="not">全不選</button>
          <button id="reverse">反選</button></p>
          <script>
          var chkBoxs = document.getElementsByName("course");
          // 全選
          var all = document.getElementById("all");
          all.onclick = function(){
              for(var i=0; i<chkBoxs.length; i++){
                  chkBoxs[i].checked = true;
              }
          }
          // 全不選
          var not = document.getElementById("not");
          not.onclick = function(){
              for(var i=0; i<chkBoxs.length; i++){
                  chkBoxs[i].checked = false;
              }
          }
          // 反選
          var reverse = document.getElementById("reverse");
          reverse.onclick = function(){
              for(var i=0; i<chkBoxs.length; i++){
                  chkBoxs[i].checked = !chkBoxs[i].checked;
              }
          }
          </script>

          示例:同意提交

          <div id="content">
          <p>Lorem ...</p>
          </div>
          <p><label>同意此協議</label><input type="checkbox" id="cbAgree" disabled /></p>
          <input type="submit" value="提交" id="btnSubmit" disabled />
          <script>
          window.onload = function(){
              var cbAgree = document.getElementById("cbAgree");
              var btnSubmit = document.getElementById("btnSubmit");
              var s = 5;
              var timer = setInterval(function(){
                  btnSubmit.value = "等待" + s + "秒";
                  if(--s < 0){
                      clearInterval(timer);
                      btnSubmit.value = "提交";
                      cbAgree.disabled = false;
                  }
              },1000);
              cbAgree.addEventListener("change", function(event){
                  btnSubmit.disabled = !cbAgree.checked;
              },false);
          }
          </script>

          Label標簽元素:
          其與其它表單元素關聯,關聯的方式有兩種:一是使用for屬性,二是將<input>直接嵌套在<label>中,在這種情況下,不需要for和id屬性,因為關聯是隱式的;
          表單的elements集合中并不包括Lable;

          Label屬性:

          • form:只讀,是一個HTMLFormElement對象,表示與其關聯的Form;如果沒有關聯Form,則為null;
          • control:只讀,表示與標簽關聯的表單元素;
          • htmlFor:可讀可寫,是一個字符串,表示與其關聯的表單元素的ID,與其HTML的for屬性對應;
          var label = document.getElementsByTagName("label")[1];
          console.log(label);
          console.log(label.form);
          console.log(label.control);
          console.log(label.htmlFor);
          label.htmlFor = "c2";
          console.log(label.control);  // checkbox
          console.log(label.htmlFor);  // c2

          表單元素的labels屬性:只讀,返回表單元素關聯的所有<label>元素的NodeList,如:

          <p><label for="content">內容:</label><br/>
          <textarea id="content" name="content"></textarea><br/>
          <label for="content">請輸入簡要的內容</label></p>
          </form>
          <script>
          var content = document.forms["myForm"].elements["content"];
          console.log(content.labels);  // NodeList(2)
          var label = content.labels[0];
          console.log(label);  // label
          console.log(label.textContent);  // 內容:
          console.log(label.form);  // <form>
          console.log(label.control);  // textarea#content
          console.log(label.htmlFor);  // content
          </script>

          select選擇框:
          選擇框是通過<select>和<option>元素創建的,其屬于HTMLSelectElement類型,瀏覽器通常將其渲染為下拉菜單的形式或設置其size屬性大于1呈現為列表的形式;

          <form id="myForm" name="myForm">
          <select name="province" id="province">
              <option value="beijing" label="大北京">北京</option>
              <option>安徽</option>
              <option value="jiangsu">江蘇</option>
              <option value="guangdong">廣東</option>
              <option value="shangdong">山東</option>
          </select>
          </form>

          其擁有除了所有表單元素共有的屬性和方法外,還提供了:

          • size :選擇框中可見的行數;等價于HTML中的size特性;
          • multiple:布爾值,表示是否允許多選;等價于HTML中的multiple特性;
          • type:值為”select-one”或”select-multiple”,取決于HTML代碼中有沒有multiple特性;
          • options:控件中所有<option>元素的HTMLCollectoin;
          • selectedIndex:選中項的索引,如果沒有選中項,為0;對于多選,只保存選中項中第一項的索引;
          • selectedOptions:表示所選中<option>元素集的HTMLCollection;
          • add(newOptoin, relOption):向<select>中插入新<option>元素,其位置在指定項relOption之前;
          • remove(index):移除給定位置的<option>選項;
          • length:返回<option>數量;
          • value:由當前選中項決定:如果沒有選中的項,則為空字符串;如果有一個選中項,而且該項的value特性已經在HTML中指定,就等于該option的value值,即使該value是空字符,也是如此;如果有一個選中項,但該項的value特性在HTML中未指定,則該value等于該項的文本(text);如果有多個選中項,取得第一個選中項的值;當其type為select-one和select-multiple時,其選擇的行為是不一樣的,如果為select-multiple,允許多選,但此時,其value返回的是第一個option的value值;
          • options屬性,其返回包含了多個Option元素的HTMLOptionsCollection集合,如:
          var province = document.forms[0].elements["province"];
          console.log(province.options);  // HTMLOptionsCollection

          該集合擁有length、selectedIndex屬性和add()及remove()方法;其中selectedIndex返回的是選中項的索引;通過options的索引可以返回一個option對象;

          console.log(province.options.selectedIndex);  // 2
          console.log(province.selectedIndex);  // 2
          console.log(province.options[1]);  // <option>

          通過select對象的item(index)方法或select的索引也可以返回一個option對象;

          var opt = selectbox.item(1);
          var opt = selectbox[1];
          console.log(opt);
          console.log(opt.index);
          console.log(opt.text);

          每個<option>元素屬于HTMLOptionElement類型,該類型繼承自成 HTMLElement,其擁有下列屬性:

          • index:當前項在options集合中的索引;
          • form:只讀,其所屬的form,與其所在的HTMLSelectElement 對象的form屬性一致;
          • label:當前選項的Label屬性;如果沒有此屬性,則返回元素的text;
          • selected:布爾值,表示當前選項是否被選中;將這個屬性設置為true可以選中當前選項;
          • defaultSelected:對應其HTML的selected特性的初始值;
          • text:選項顯示的純文本字符串;
          • value:選項的值;等價于HTML中的value特性,即提交給服務端的文本;

          設置這些屬性的目的,是為了方便對選項數據的訪問,雖然可以使用常規的DOM功能來訪問這些信息,但效率比較低:

          var province = document.forms[0].elements["province"];
          // 不推薦
          // var text = province.options[0].firstChild.nodeValue;
          var text = province.options[0].textContent; // 或
          var value = province.options[0].getAttribute("value");
          console.log(text, value);
          // 推薦
          var text = province.options[0].text;
          var value = province.options[0].value;
          console.log(text, value);
          console.log(province.options[0].index);
          console.log(province.options[0].selected);
          console.log(province.options[0].label);
          province.options[2].selected = true;
          // options[1]沒有value,所以返回其text
          console.log(province.options[1].value);

          在未指定value特性的情況下,IE7會返回空字符串,其他會返回與text特性相同的值;

          <opggroup>:
          <optgroup>HTML元素在<select>元素中創建一組選項,其屬于HTMLOptGroupElement類型,屬性為:
          disabled:是一個布爾值,表示整個子項列表<option>是否已禁用(true)或未禁用(false);
          label:表示組label屬性;

          <form>
          <select id="selectbox">
              <optgroup label="前端" disabled>
                  <option>HTML</option>
                  <option>CSS</option>
                  <option>JavaScript</option>
              </optgroup>
              <optgroup label="后端">
                  <option>C#</option>
                  <option>Java</option>
                  <option>PHP</option>
              </optgroup>
          </select>
          <script>
          var selectbox = document.getElementById("selectbox");
          var optgroup = selectbox.getElementsByTagName("optgroup")[0];
          console.dir(optgroup);  // HTMLOptGroupElement
          console.dir(optgroup.label);  // 前端
          </script>

          選擇選項:
          對于只允許選擇一項的選擇框,最簡單的方式就是直接使用selectedIndex屬性,利用此屬性既可以獲取選中的項,也可設置某個項被造中;如:

          var selectedIndex = province.selectedIndex;
          var selectedOption = province.options[selectedIndex];
          console.log("選中項的索引:" + selectedIndex + ",text" + selectedOption.text + ",value:" + selectedOption.value);
          province.selectedIndex = 1;  // 根據索引設置選中項
          var selectedIndex = province.selectedIndex;
          var selectedOption = province.options[selectedIndex];
          console.log("選中項的索引:" + selectedIndex + ",text" + selectedOption.text + ",value:" + selectedOption.value);

          對于multiple多項的選擇,單個selectedIndex屬性不足以表示被選中的多個選項,即使選中多個,讀取則只會返回選中項第一項的索引值且其value值也是第一個選中的Option的value值;

          selected屬性:另一種選擇選項的方式,即取得某一項的引用,然后將其selected屬性設置為true;

          console.log(province.options[0].selected); // false
          console.log(province.options[2].selected); // true
          province.options[0].selected = true;
          province.options[1].selected = true;

          與selectedIndex不同的是,在允許多選的選擇框中設置選項的selected屬性,不會取消對其他選中項的選擇,因而可以動態選中任意多個項;但如果是在單選擇框中,會取消對其他選擇的選擇;

          selected屬性的作用主要是確定用戶選擇了選擇框中的哪些項;要取得所有選中的項,可以遍歷Options選項集合,逐個測試每個選項的selected屬性:

          var province = document.forms[0].elements["province"];
          function getSelectedOptions(selectbox){
              var result = new Array();
              var option = null;
              for(var i=0, len=selectbox.options.length; i<len; i++){
                  option = selectbox.options[i];
                  if(option.selected){
                      result.push(option);
                  }
              }
              return result;
          }
          var province = document.forms[0].elements["province"];
          var selectedOptions = getSelectedOptions(province);
          var msg = "";
          for(var i=0,len = selectedOptions.length; i<len; i++){
              msg += "index:" + selectedOptions[i].index + ",text:" + selectedOptions[i].text + ",value:"+ selectedOptions[i].value  + ";";
          }
          console.log(msg);

          selectedOptions屬性:只讀屬性,其返回當前選定的<option>元素的HTMLCollection;

          console.log(province.selectedOptions); // HTMLCollection

          如果是select-one單選,其中包含一個option,如果是select-mutiple多選,就包括所有選定的option;
          例如:獲取所有選中項

          <label for="foods">你喜歡吃什么?</label><br>
          <select id="foods" name="foods" size="7" multiple>
              <option value="1">蘋果</option>
              <option value="2">香蕉</option>
              <option value="3">桔子</option>
              <option value="4">披薩</option>
              <option value="5">西紅柿</option>
          </select>
          <br>
          <button name="order" id="order">確定</button>
          <p id="output"></p>
          <script>
          var orderButton = document.getElementById("order");
          var itemList = document.getElementById("foods");
          var outputBox = document.getElementById("output");
          orderButton.addEventListener("click", function() {
              var collection = itemList.selectedOptions;
              var output = "";
              for (var i=0; i<collection.length; i++) {
                  if (output === "") {
                      output = "你喜歡吃的食物如下:";
                  }
                  output += collection[i].text;
                  if(i === (collection.length - 2) && (collection.length < 3))
                      output +=  "和";
                  else if(i < (collection.length - 2))
                      output += ",";
                  else if(i === (collection.length - 2))
                      output += "和";
              }
              if(output === "")
              output = "你啥也不喜歡";
              outputBox.innerHTML = output;
          }, false);
          </script>

          添加選項:
          可以動態添加選項,并將它們添加到選擇框中;有多種添加的方式:
          第一種:使用DOM方法:

          var newOption = document.createElement("option");
          newOption.appendChild(document.createTextNode("天津"));
          // newOption.setAttribute("value", "tianjin");
          newOption.value = "tianjin";
          selectbox.appendChild(newOption);

          第二種:使用Option構造函數來創建新選項:
          語法:var option = new Option(text?, value?, ?defaultSelected, ?selected);參數text和value分別設置Option對象的text和value;后兩個參數,分別設置option的defaultSelected和selected屬性,4個參數均為可選;其會返回一個<option>元素;

          var newOption = new Option("上海", "shanghai");
          selectbox.appendChild(newOption);
          newOption = new Option("四川","sichuan",true,true);
          selectbox.appendChild(newOption);
          newOption = new Option();
          newOption.text = "貴州";
          newOption.value = "guizhou";
          newOption.label = "美麗貴州";
          newOption.selected = true;
          selectbox.appendChild(newOption);

          IE7以下不可用,因為它不能正確設置新選項的text屬性;

          第三種:使用選擇框的add()方法:
          語法:select.add(option[, before);其接受兩個參數:要添加的新選項option和將位于新選項之后的選項before;before即可以是一個option也可以是選項的索引;before為可選,如果要在列表的最后添加選項,應該將第二個參數設置為null、undefined或者不設;如:

          var newOption = new Option("上海", "shanghai");
          selectbox.add(newOption, selectbox.options[1]); // 第2個位置
          selectbox.add(newOption, 1); // 第2個位置
          selectbox.add(newOption, null); // 最后位置
          selectbox.add(newOption, undefined); // 最后位置
          selectbox.add(newOption, 100); // 最后位置
          selectbox.add(newOption); // 最后位置

          如果將新選項添加到任意位置,使用DOM技術和insertBefore()方法也可以;

          第四種,使用options屬性也可以把新的option添加到選擇框中,或者使用表單索引,如:

          var newOption = new Option("上海", "shanghai");
          selectbox.options[selectbox.options.length] = newOption; // 或者
          selectbox[selectbox.options.length] = newOption;
          // 如,添加多個
          var arrOptions = ['重慶','云南','廣西'];
          arrOptions.forEach(function(v,i){
              selectbox[selectbox.options.length] = new Option(v);
          });
          // 或
          arrOptions = [
              {text: "重慶", value: "chongqing"},
              {text: "云南", value: "yunnan"},
              {text: "廣西", value: "guangxi"}
          ];
          arrOptions.forEach(function(v,i){
              selectbox[selectbox.options.length] = new Option(v.text, v.value);
          });

          移除選項:
          移除選項也有多種方式:首先可以使用DOM的removeChild()方法,為其傳入要移除的選項;其次可以使用選擇框的remove()方法,為其傳入要移除選項的索引;最后,可以將相應選項設置為null;

          selectbox.removeChild(selectbox.options[1]);
          selectbox.remove(2);
          selectbox.options[2]=null;
          // 如果不帶參數,會刪除selectbox本身
          selectbox.remove();

          移除選擇框中所有的項,可以迭代所有選項并逐個移除:

          function clearSelectbox(selectbox){
              for(var i=0,len=selectbox.options.length; i<len; i++){
                  selectbox.remove(0);
              }
          }
          clearSelectbox(selectbox);

          使用options屬性也可以移除全部或某個選項,

          selectbox.options[1] = null;  // 移除第2個
          selectbox.options.length = 2; // 截斷,只保留2個
          // selectbox.options.length = 0; // 移除所有
          selectbox.length = 0; // 移除所有

          移動選項:
          將一個選擇框中的選項移動到另一個選擇框中,使用DOM的appendChild()方法,因為使用appendChild()方法并傳入一個已存在的元素,那么就會先從該元素的父節點中移除它,再把它添加到新的指定的位置;

          var selectbox1 = document.getElementById("selLocation1");
          var selectbox2 = document.getElementById("selLocation2");
          selectbox2.appendChild(selectbox1.options[1]);

          移動和移除選項有一個共同之外,即會重置每一個選項的index屬性;

          <h3>移動選項</h3>
          <select name="sel1" id="sel1" size="8" multiple>
              <option value="">唐</option>
              <option value="">宋</option>
              <option value="">元</option>
              <option value="">明</option>
              <option value="">清</option>
          </select>
          <button id="toRight">>></button>
          <button id="toLeft"><<</button>
          <select name="sel2" id="sel2" size="8" multiple>
              <option value="">秦</option>
              <option value="">漢</option>
              <option value="">三國</option>
              <option value="">兩晉</option>
              <option value="">南北朝</option>
          </select>
          <script>
          var sel1 = document.getElementById("sel1");
          var sel2 = document.getElementById("sel2");
          var toRight = document.getElementById("toRight");
          var toLeft = document.getElementById("toLeft");
          toRight.onclick = function(){
              var options = sel1.selectedOptions;
              for(var i=options.length-1; i>=0; i--){
                  sel2.appendChild(options[i]);
              }
          };
          toLeft.onclick = function(){
              var options = sel2.selectedOptions;
              for(var i=options.length-1; i>=0; i--){
                  sel1.appendChild(options[i]);
              }
          }
          </script>

          重排選項:
          重排選項的次序,最好的方式也是DOM方法,如appendChild()適合將選項添加到選擇框的最后,insertBefore()可以將選項移動到指定位置,如:

          var optionToMove = selectbox.options[1];
          // 向上移一下
          selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index - 1]);
          // 向下移一下
          selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index + 2]);

          select的事件:
          選擇框的change事件與其他表單控件的change事件觸發的條件不一樣,其他控件的change事件是在值被修改且焦點離開時觸發,而選擇框的change事件只要選中了選項就會觸發;
          選擇不同的選項時,也會觸發input事件,如:

          selectbox.addEventListener("change", function(event){
              console.log(event.target.selectedIndex);
          });
          function inputHandler(e){
              console.log(e.target.value);
          }
          selectbox.addEventListener("input", inputHandler);

          示例:跳轉

          <select id="links">
              <option value="https://www.zeronetwork.cn">零點網絡</option>
              <option value="https://cn.bing.com">Bing</option>
              <option value="https://www.apple.com">蘋果</option>
          </select>
          <script>
          var links = document.getElementById("links");
          links.addEventListener("change", function(event){
              location.href = event.target.options[event.target.selectedIndex].value;
          });
          </script>

          表單序列化:
          隨著Ajax的出現,表單序列化已經成為一種常見需求;在Javascript中,可以利用表單元素的type屬性,連同name和value屬性一起實現對表單的序列化;
          瀏覽器把數據發送給服務器原理:

          • 對表單字段的名稱和值進行URL編碼,使用和號(&)分隔;
          • 不發送禁用的表單字段;
          • 只發送勾選的復選框和單選按鈕,并且復選框中的每個選中的值單獨一個條目;
          • 不發送type為”reset”和”button”的按鈕;
          • 多選選擇框中的每個選中的值單獨一個條目;

          如:表單簡單序列化;

          var btn = document.getElementById("btn");
          btn.addEventListener("click", submitHandler, false);
          function submitHandler(event){
              var myForm = document.forms[0];
              var username = myForm.elements["username"].value;
              var userpwd = myForm.elements["userpwd"].value;
              var sex = myForm.elements["sex"].value;
              var courseValue = [];
              var courseList = myForm.elements["course"];
              for(var i=0, len=courseList.length; i<len; i++){
                  if(courseList[i].checked)
                      courseValue.push(courseList[i].value);
              }
              var params = "username=" + username +
                          "&userpwd=" + userpwd +
                          "&sex=" + sex +
                          "&course=" + courseValue;
              console.log(params);
          }

          如:通用序列化:

          function serialize(form){
              // 后面要用到的變量
              var params = new Array();
              var field = null,
                  i, j, len,
                  optLen,
                  option,
                  chkObj = {};
                  
              for(i=0, len=form.elements.length; i<len; i++){
                  field = form.elements[i];
                  switch(field.type){
                      // 如果是select,包含單選和多選
                      case "select-one":
                      case "select-multiple":
                          arrOpt = [];
                          for(j=0, optLen=field.options.length; j<optLen; j++){
                              option = field.options[j];
                              if(option.selected){
                                  arrOpt.push(encodeURIComponent(option.value));
                              }
                          }
                          arrOpt = arrOpt.join(",");
                          params.push(encodeURIComponent(field.name) + "=" + arrOpt);
                          break;
                      // 如果是fieldset、file、submit、reset、button不提交
                      case undefined: //字段集
                      case "file":    //文件域
                      case "submit":  //提交
                      case "reset":   //重置
                      case "button":  //按鈕
                          break;
                      // 如果是單選或復選框
                      case "radio":
                      case "checkbox":
                          if(field.checked){
                              if(chkObj[field.name])
                                  chkObj[field.name].push(encodeURIComponent(field.value));
                              else
                                  chkObj[field.name] = [encodeURIComponent(field.value)];
                          }
                          break;
                      default:
                          // 如果沒有名字的表單元素,不提交
                          if(field.name.length)
                              params.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
                  }
              }
              for(var o in chkObj){
                  params.push(encodeURIComponent(o) + "=" + chkObj[o].join(","));
              }
              return params.join("&");
          }
          // 應用
          var btn = document.getElementById("btn");
          btn.addEventListener("click", submitHandler, false);
          function submitHandler(event){
              var myForm = document.forms[0];
              var params = serialize(myForm);
              console.log(params);
          }

          無刷新提交(局部刷新):

          <script>
          function saveUserInfo(){
              var msg = document.getElementById("msg");
              var form = document.forms[0];
              // 提交地址
              var url = "./demo.php"; 
              // POST的值,把每個變量都通過&來聯接
              var postStr = serialize(form);
                  
              // XmlHTTP
              var XmlHTTP;
              if(window.XMLHttpRequest) {
                  XmlHTTP = new XMLHttpRequest();
              }else if(window.ActiveXObject) {
                  XmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
              }
              XmlHTTP.open("POST", url, true);
              //定義傳輸的文件HTTP頭信息
              XmlHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
              XmlHTTP.send(postStr); //發送POST數據
              //獲取執行狀態
              XmlHTTP.onreadystatechange = function() {
                  //如果執行狀態成功,那么就把返回信息寫到指定的層里
                  if (XmlHTTP.readyState == 4 && XmlHTTP.status == 200) {
                      msg.innerHTML = XmlHTTP.responseText;
                  }
              }
          }
          </script>
          <div id="msg"></div>
          <form name="userinfo" method="post" action="">
              姓名:<input type="text" id="username"name="username" /><br />
              年齡:<input type="text" name="age" /><br />
              性別:<input type="text" name="sex" /><br />
              <input type="button" value="提交表單" onClick="saveUserInfo()">
          </form>

          demo.php:

          <?php
          $username = $_POST['username'];
          $age = $_POST['age'];
          $sex = $_POST['sex'];
          echo "$username <br>";
          echo "$userage <br>";
          echo "$usersex <br>";
          // 鏈接數據庫,并保存到數據庫,$result為執行結果
          $result = true;
          if ($result){
              echo "提交成功!";
          }
          else {
              echo "提交失敗!";
          }
          ?>

          整合:saveUserInfo()中換成:

              // 提交地址
              var url = "./demo.php"; 
              // POST的值,把每個變量都通過&來聯接
              var postStr = serialize(form);

          submitHandler()事件處理函數:


          主站蜘蛛池模板: 精品人妻少妇一区二区三区不卡 | 无码乱人伦一区二区亚洲一 | 亚洲色精品三区二区一区 | 日韩精品一区二区三区影院| 国产香蕉一区二区在线网站| 亚洲一区二区三区偷拍女厕 | 国产成人高清亚洲一区91| 无码一区二区三区爆白浆| 一本一道波多野结衣AV一区| 国产精品99精品一区二区三区 | 精品视频一区二区三区四区五区 | 视频一区二区在线观看| 一区二区三区在线观看视频| 亚洲线精品一区二区三区 | 美女毛片一区二区三区四区| 国产精品免费视频一区| 少妇精品无码一区二区三区| 日韩美女在线观看一区| 国产自产V一区二区三区C| 日本无码一区二区三区白峰美| aⅴ一区二区三区无卡无码| 精品国产AV一区二区三区| 大伊香蕉精品一区视频在线 | 亚洲午夜一区二区三区| 国模丽丽啪啪一区二区| 国产精品日韩欧美一区二区三区| 伊人色综合一区二区三区| 乱人伦一区二区三区| 欧美日韩综合一区二区三区| 久久久久久一区国产精品| 国产伦精品一区二区三区在线观看 | 亚洲福利一区二区精品秒拍| 国产激情一区二区三区小说| 久久久一区二区三区| 精品亚洲一区二区三区在线观看| 日韩免费视频一区| 成人免费一区二区无码视频| 欧美人妻一区黄a片| 亚洲中文字幕一区精品自拍| 极品尤物一区二区三区| 四虎永久在线精品免费一区二区 |