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 | 允許用戶選擇日期和時間(無時區) |
用于應該包含電子郵件地址的輸入字段 | |
search | 用于搜索字段(搜索字段的表現類似常規文本字段) |
tel | 用于應該包含電話號碼的輸入字段 |
url | 用于應該包含 URL 地址的輸入字段 |
輸入限制:
這就是有關HTML表單的大概內容了,希望這篇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屬性:
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>
其擁有除了所有表單元素共有的屬性和方法外,還提供了:
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,其擁有下列屬性:
設置這些屬性的目的,是為了方便對選項數據的訪問,雖然可以使用常規的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屬性一起實現對表單的序列化;
瀏覽器把數據發送給服務器原理:
如:表單簡單序列化;
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()事件處理函數:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。