OptionGroup 對象
OptionGroup 對象表示一個 HTML <optgroup> 元素。
訪問 OptionGroup 對象
您可以使用 getElementById() 來訪問 <optgroup> 元素:
var x=document.getElementById("myOptgroup");
創(chuàng)建 OptionGroup 對象
您可以使用 document.createElement() 方法來創(chuàng)建 <optgroup> 元素:
var x=document.createElement("OPTGROUP");
OptionGroup 對象屬性
屬性 | 描述 |
---|---|
disabled | 設(shè)置或返回是否禁用選項組。 |
label | 設(shè)置或返回選項組的 label 屬性的值。 |
標準屬性和事件
OptionGroup 對象同樣支持標準 屬性 和 事件。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
HTML中使用 <select> 和 <option> 元素創(chuàng)建選擇框。而 <select> 元素對應的是 HTMLSelectElement 接口,<option> 元素對應的是 HTMLOptionElement 接口。這兩個接口都是通過 HTMLElement 接口從其他 HTML 元素共享所有屬性和方法。
先從 <select> 元素對應的 HTMLSelectElement 接口開始介紹專屬的屬性和方法。
下面介紹一下<select> 元素根據(jù)不同選中狀態(tài)下的value屬性的值:
<select name="location" id="selLocation">
<option value="Sunnyvale, CA">Sunnyvale</option>
<option value="Los Angeles, CA">Los Angeles</option>
<option value="Mountain View, CA">Mountain View</option>
<option value="">China</option>
<option>Australia</option>
</select>
當選中選項框中的第一項時,<select> 元素的 value 值為 "Sunnyvale, CA";而選中第四項時,<select> 元素的 value 值為 "",因為該項的 value 屬性是空字符串;選中最后一項,則 value 值為 "Australia",因為該 <option> 元素沒有指定 value 屬性。
因此,根據(jù)以上的例子,<select> 元素的value屬性根據(jù)以下規(guī)則獲取值:
再介紹 <option> 元素對應的 HTMLOptionElement 接口專屬屬性和方法。
這里強調(diào)一下,<select> 元素的 change 事件與其它表單字段是不一樣的。其它表單字段會在自己的值改變后觸發(fā) change 事件,然后字段失去焦點。而 <select> 會在選中一項時立即觸發(fā) change 事件。
對于只允許選擇一項的 <select> 元素,獲取選項最簡單的方式是使用 <select> 元素的 selectIndex 屬性,如下面的例子:
let selectedOption=selectbox.options[selectbox.selectedIndex];
獲取到 <option> 元素后,就可以根據(jù) <option> 元素的屬性和方法獲取想要的信息。
對于允許多選的 <select> 元素,selectedIndex 屬性就像只允許選擇一項一樣。設(shè)置 selectedIndex 會移除所有選項,只選擇指定的項,而獲取 selectedIndex 只會返回選中的第一項的索引。
選項還可以通過取得選項的引用并將其 selected 屬性設(shè)置為 true 來選中。例如,以下代碼會選中 <select> 的第一項:
selectbox.options[0].selected=true;
與 selectedIndex 不同,設(shè)置選項的 selected 屬性不會在多選時移除其他選項,從而可以動態(tài)選擇任意多個選項。如果修改單選框中選項的 selected 屬性,則其他選項會被移除。要注意的是,把 selected 屬性設(shè)置為 false 對單選框沒有影響。
通過 selected 屬性可以確定選擇框中哪個選項被選中。要取得所有選中項,需要循環(huán)選項集合逐一檢測 selected 屬性,比如:
function getSelectedOptions(selectbox){
let result=new Array();
for (let option of selectbox.options) {
if (option.selected) {
result.push(option);
}
}
return result;
}
可以使用 JavaScript 動態(tài)創(chuàng)建選項并將它們添加到選擇框。首先,可以使用 DOM 方法,如下所示:
let newOption=document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "Option value");
selectbox.appendChild(newOption);
以上代碼創(chuàng)建了一個新的<option>元素,使用文本節(jié)點添加文本,設(shè)置其 value 屬性,然后將其添加到選擇框。添加到選擇框之后,新選項會立即顯示出來。
瀏覽器原生提供 Option() 構(gòu)造函數(shù)創(chuàng)建 HTMLOptionElement 實例:
new Option(text, value, defaultSelected, selected) : HTMLOptionElement
來看案例:
let newOption=new Option("Option Text", "Option Value", true);
創(chuàng)建之后,需要將該實例添加到 HTML 的 <select> 元素中,這里有兩種添加方法:
這里詳細介紹下 add() 方法:
add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void;
如果想要符合所有瀏覽器的規(guī)范,可以傳入 undefined 作為第二個參數(shù)。
let newOption=new Option("Option text", "Option value", true);
selectbox.add(newOption, undefined);
這里注意一下 defaultSelected 和 selected 兩個參數(shù),有時候容易弄混。selected 屬性為 true 時,該 <option> 當前狀態(tài)處于已選擇狀態(tài)。defaultSelected 屬性為 true 時,表示 <option> 在默認情況下為已選擇狀態(tài),但不代表 <option> 的當前狀態(tài)是已選擇狀態(tài)。當頁面重置時,selected 屬性值為 true 的 <option> 可能會變成未選擇狀態(tài),而 defaultSelected 屬性值為 true 的 <option> 則一定會變成已選擇狀態(tài)。
移除 <option> 元素的方法也不止一種,下面列舉的方法都可以實現(xiàn):
要清除選擇框的所有選項,需要迭代所有選項并逐一移除它們,如下面例子所示:
function clearSelectbox(selectbox) {
for (let index=0; index < selectbox.options.length;) {
selectbox.remove(0);
}
}
使用 DOM 操作中的 appendChild() 方法實現(xiàn)從一個 <select> 元素中將 <option> 移到另一個 <select> 元素中,這種實現(xiàn)方法會將 <option> 元素先從其父元素中移除,然后再插入指定位置。如下所示:
let selectbox1=document.getElementById("selLocations1");
let selectbox2=document.getElementById("selLocations2");
selecbox2.appendChild(selectbox1.options[0]);
移動選項和移除選項都會導致每個 <option> 的 index 屬性重置。
重排 <option> 的話,使用 DOM 操作中的 insertBefore() 方法,而移到最后位置,還是使用 appendChild() 方法較為方便。
下面的代碼演示了將一個 <option> 在 <select> 中前移一個位置:
let optToMove=selectbox.options[1];
selectbox.insertBefore(optToMove, selectbox.options[optionToMove.index-1]);
這個例子首先獲得要移動 <option> 的索引,然后將其插入之前位于它前面的 <option> 之前,其中第二行代碼適用于除第一個 <option> 之外的所有 <option>。下面的代碼則可以將<option>向下移動一個位置:
let optionToMove=selectbox.options[1];
selectbox.insertBefore(optionToMove,
selectbox.options[optionToMove.index+2]);
<select> 和 <option> 是在 HTML 頁面布局時,經(jīng)常使用的表單控件,學會使用與之對應的 HTMLSelectElement 和 HTMLOptionElement 接口中的屬性和方法會很容易的操控 <select> 和 <option> 元素。借助于 DOM 操作 <select> 和 <option> 也較為方便。
例
帶有兩個輸入字段和一個提交按鈕的 HTML 表單:
<form action="demo_form.php" method="get">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="提交">
</form>
(更多實例見頁面底部)
瀏覽器支持
所有主流瀏覽器都支持 <form> 標簽。
標簽定義及使用說明
<form> 標簽用于創(chuàng)建供用戶輸入的 HTML 表單。
<form> 元素包含一個或多個如下的表單元素:
<input>
<textarea>
<button>
<select>
<option>
<optgroup>
<fieldset>
<label>
HTML 4.01 與 HTML5之間的差異
HTML5 新增了兩個新的屬性:autocomplete 和 novalidate,同時不再支持 HTML 4.01 中的某些屬性。
HTML 與 XHTML 之間的差異
在 XHTML 中,name 屬性已被廢棄。使用全局 id 屬性代替。
屬性
New :HTML5 中的新屬性。
屬性 | 值 | 描述 |
---|---|---|
accept | MIME_type | HTML5 不支持。規(guī)定服務器接收到的文件的類型。(文件是通過文件上傳提交的) |
accept-charset | character_set | 規(guī)定服務器可處理的表單數(shù)據(jù)字符集。 |
action | URL | 規(guī)定當提交表單時向何處發(fā)送表單數(shù)據(jù)。 |
autocompleteNew | onoff | 規(guī)定是否啟用表單的自動完成功能。 |
enctype | application/x-www-form-urlencodedmultipart/form-datatext/plain | 規(guī)定在向服務器發(fā)送表單數(shù)據(jù)之前如何對其進行編碼。(適用于 method="post" 的情況) |
method | getpost | 規(guī)定用于發(fā)送表單數(shù)據(jù)的 HTTP 方法。 |
name | text | 規(guī)定表單的名稱。 |
novalidateNew | novalidate | 如果使用該屬性,則提交表單時不進行驗證。 |
target | _blank_self_parent_top | 規(guī)定在何處打開 action URL。 |
全局屬性
<form> 標簽支持 HTML 的全局屬性。
事件屬性
<form> 標簽支持 HTML 的事件屬性。
實例
帶有復選框的表單
此表單包含兩個復選框和一個提交按鈕。
帶有單選按鈕的表單
此表單包含兩個單選框和一個提交按鈕。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。