Warning:
This wiki has been archived and is now read-only.

HTML5/common-input-element-attributes

From HTML5 Chinese Interest Group Wiki
Jump to: navigation, search
input 元素的共通屬性

每個 input 元素的 type 屬性的狀態的定義決定了以下哪些屬性適用於這個元素。當某個一個屬性不適用於某個 input 元素時,使用者代理必須忽視該屬性,此時以下對於的該屬性的要求與定義皆不適用。

autocomplete 屬性

部分使用者代理有幫助使用者填寫表單的功能,舉例來說,預先幫使用者填上之前輸入過的地址。

autocompelte 屬性是一個列舉屬性,他有三個狀態:對應到關鍵字 on 的開啟狀態、對應到關鍵字 off 的關閉狀態、不指定屬性時的失蹤預設值是預設狀態。

關閉狀態代表控制項的輸入特別重要(例如核武的啓動代碼),或者輸入絕不可重復使用(例如銀行登入的一次性鑰匙)因此使用者必須每次輸入,而不可讓使用者代理預先填寫,又或網頁提供自己的自動完成機制而不需要使用者代理提供的自動完成值。

相反的,開啟狀態代表這個值不是特別重要,使用者可以讓他的使用者代理記憶他在那個控制項輸入的值。

預設狀態代表使用者會用該元素的主表單上的 autocomplete 屬性。(form 元素的 autocomplete 屬性預設處於開啟狀態。)

每一個 input 元素都有一個自動完成狀態結果,是開啟或關閉兩者其一。

當 input 元素處於以下任一種情況時,input 元素的自動完成狀態結果為開啟,否則 input 元素的自動完成狀態結果為關閉。

當一個 input 元素的自動完成狀態結果為開啟,使用者代理可以庫存使用者輸入的值以作為表單預先填寫之用,以期未來使用者返回同樣頁面。否則,使用者不應該記憶控制項的取值,也不應該提供使用者過去輸入的值。

另外,若自動完成狀態結果為關閉 ,當瀏覽器穿越歷史時會重設取值。

使用者代理必須將自動完成當成使用者對元素取值的更改,且自動完成必須發生在元素處於可變狀態的時候(例如,元素剛進入文件的時候,或者使用者代理停止解析的時候)。

銀行往往不讓使用者代理預先填寫登入資訊:
<p><label>帳戶:<input type="text" name="ac" autocomplete="off"></label></p>
<p><label>PIN:<input type="password" name="pin" autocomplete="off"></label></p>
使用者代理可以讓使用者覆蓋自動完成狀態結果,成為一直記憶使用者輸入並預先填寫表格的開啟,或是永遠不記憶的關閉。然而,由於使用者代理不論哪種網站記住所有使用者輸入的作法有安全上的隱憂,覆蓋自動完成狀態結果成為開啟的功能不應該輕易可以使用。
dirname 屬性

當 dirname 屬性適用於某元素上 時,它是表單控制項 dirname 屬性。

在下面的例子裡,表單有一個文字欄位與一個提交按鈕。
<form action="addcomment.cgi" method=post>
 <p><label>評論:<input type=text name="comment" dirname="comment.dir" required></label></p>
 <p><button name="mode" type=submit value="add">發表評論</button></p>
</form>

當使用者提交表單時,使用者代理會準備三個欄位:"comment", "comment.dir", "mode",若使用者輸入 "Hello",提交內文可能變成:

comment=Hello&'''comment.dir=ltr'''&mode=add

若使用者手動切換成右到左的書寫方向並輸入 "مرحبًا",提交內文可能變成:

comment=%D9%85%D8%B1%D8%AD%D8%A8%D9%8B%D8%A7&comment.dir=rtl&mode=add
list 屬性

list 屬性可以用來指定代表預定義的建議選項列表的一個元素。

若網頁作者欲設定此屬性,則它的取值必須是同樣文件裡一個 datalist 元素的 ID。

若文件中以樹排序算的第一個 ID 等同於 list 屬性值的元素是一個 datalist 元素,則該元素為 input 元素的建議來源元素。若未指定 list 屬性,或者沒有擁有該 ID 的元素,又或第一個有該 ID 的元素不是一個 datalist 元素,則 input 元素沒有建議來源元素。

若 input 元素具有建議來源元素,則當使用者代理讓使用者編輯 input 元素的取值時,使用者代理應該視控制項的形態,以適合的方式提供建議來源元素代表的建議選項給使用者。使用者代理可以在適當的時機用建議選項的標籤代表該選項。

使用者選取建議選項後的處理方法視元素是否為僅接受單一取值的控制項,又或元素可以接受數個取值而定。

↪ 若元素不具有 multiple 屬性,或是 multiple 屬性不適用

當使用者選取了一個建議選項,input 元素的取值必須設為選到選項的取值,如同使用者自己輸入的。

↪ 若元素確時有 multiple 屬性,且 multiple 屬性適用

當使用者選取了一個建議選項,使用者代理必須加一份有選到選項的取值的資料到 input 元素的取值組,或者更改 input 元素取值組裡既有的一份資料成為選到選項的取值,如同使用者自己加了一份有該數值的資料,或編輯了一份既有資料成為該值。使用上述兩種行為的那種取決於使用者介面,由使用者代理決定。

若 list 屬性不適用,則 input 元素沒有建議來源元素。

以下的網址條會提供幾種建議選項。
<label>首頁:<input name=hp type=url list=hpurls></label>
<datalist id=hpurls>
 <option value="http://www.google.com/" label="Google">
 <option value="http://www.reddit.com/" label="Reddit">
</datalist>
使用者歷史中的其他網址也可能出現,這因用戶代理不同而有所不同。
以下範例講解如何設計使用自動完成列表功能,但是在老舊使用者代理下仍有用的表單。

若自動完成列表僅是補助工具且對於內容不重要,則直接把各 option 元素放在 datalist 元素下就夠了。為了避免老舊使用者代理渲染這些值,值應該寫在 value 屬性裡而不是行內。

<p>
 <label>
  輸入一個品種:
  <input type="text" name="breed" list="breeds">
  <datalist id="breeds">
   <option value="阿比西尼亞貓">
   <option value="挪邦貓">
   <!-- ... -->
  </datalist>
 </label>
</p>

然而,若這些值必須在老舊使用者代理上顯示,則需要將後退內容放在 datalist 元素裡,如下:

<p>
 <label>
  輸入一個品種:
  <input type="text" name="breed" list="breeds">
 </label>
 <datalist id="breeds">
  <label>
   或從列表中選取:
   <select name="breed">
    <option value="">(未選取)
    <option>阿比西尼亞貓
    <option>挪邦貓
    <!-- ... -->
   </select>
  </label>
 </datalist>
</p>

後退內容只會在不支援 datalist 的使用者代理上顯示。另一方面,儘管這些選項不是 datalist 元素直接的子節點,所有使用者代理都會偵測到這些選項。

請注意若 datalist 裡的 option 元素具有 selected 屬性,則老舊使用者代理會預設選取該選項(因為 select 的關係),但是這種情況不會發生在支援 datalist 元素的使用者代理上。
readonly 屬性

readonly 屬性是一個布林屬性,控制使用者能否編輯某個表單控制項。具有此屬性的元素是不可變的。

約束驗證:若一個 input 元素具有 readonly 屬性,不進行這個元素的約束驗證。

在下面例子中,使用者不能更動既有產品的標識符,但是這些標識符還是呈現為表單的一部分,以與新產品(尚未輸入標識符)所使用的新的欄位在外觀上一致。
<form action="products.cgi" method=post enctype="multipart/form-data">
 <table>
  <tr> <th> 產品 ID <th> 產品名稱 <th> 價格 <th> 操作
  <tr>
   <td> <input readonly name="1.pid" value="H412">
   <td> <input required name="1.pname" value="奧客牌落地燈">
   <td> $<input required type=number min=0 step=0.01 name="1.pprice" value="49.99">
   <td> <button formnovalidate name="action" value="delete:1">刪除</button>
  <tr>
   <td> <input readonly name="2.pid" value="FG28">
   <td> <input required name="2.pname" value="奧客牌桌燈">
   <td> $<input required type=number min=0 step=0.01 name="2.pprice" value="24.99">
   <td> <button formnovalidate name="action" value="delete:2">刪除</button>
  <tr>
   <td> <input required name="3.pid" value="" pattern="[A-Z0-9]+">
   <td> <input required name="3.pname" value="">
   <td> $<input required type=number min=0 step=0.01 name="3.pprice" value="">
   <td> <button formnovalidate name="action" value="delete:3">刪除</button>
 </table>
 <p> <button formnovalidate name="action" value="add">加入</button> </p>
 <p> <button name="action" value="update">除存</button> </p>
</form>
size 屬性

size 屬性可以用來指定在視覺渲染下,用戶代理允許正在編輯此元素取值的使用者看到的字元數。

若網頁作者欲指定 size 屬性,則它的取值必須是大於零的合法非負整數。

若某個元素具有此屬性,使用者代理必須使用非負整數解析規則解析它的取值,且若結果是大於零的數,則使用者代理應該確保使用者可以至少看到那麼多個字元。

IDL 屬性 size 受限於大於零的非負數值,且預設值為 20。

required 屬性

required 屬性 屬性是一個布林屬性。當某個元素具有此屬性,他是必要的。

約束驗證:若一個元素是必要的且它的 IDL 屬性 value 適用且處於數值模式,又它是可變的且取值為空字串,則此元素苦於失蹤。

以下的表單有兩個必要欄位,一個是郵件信箱欄,一個是密碼欄。表單的第三個欄位只有當使用者在密碼欄跟第三個欄位輸入相同密碼時才合法。
<h1>創建新帳號</h1>
<form action="/newaccount" method=post
      oninput="up2.setCustomValidity(up2.value != up.value ? '密碼不相符。' : '')">
 <p>
  <label for="username">郵件信箱:</label>
  <input id="username" type=email required name=un>
 <p>
  <label for="password1">密碼:</label>
  <input id="password1" type=password required name=up>
 <p>
  <label for="password2">確認密碼:</label>
  <input id="password2" type=password name=up2>
 <p>
  <input type=submit value="Create account">
</form>
multiple 屬性

multiple 屬性是一個表示使用者代理允不允許使用者輸入超過一個取值的布林屬性。

以下片段是讓電子郵件客戶端的「Cc」欄位處理多個郵件地址的方法。
<label>Cc: <input type=email multiple name=cc></label>

若使用者在他的線下聯絡人資料庫裡有「Arthur Dent」(地址「art@example.net」)與「Adam Josh」(地址「adamjosh@example.net」)兩個朋友,則在使用者輸入了「a」以後,使用者代理可以給使用者建議這兩個郵件。

sample-email-1.png

頁面也可以直接連到網站上的使用者的聯絡人資料庫:

<label>Cc: <input type=email multiple name=cc list=contacts></label>
...
<datalist id="contacts">
 <option value="hedral@damowmow.com">
 <option value="pillar@example.com">
 <option value="astrophy@cute.example">
 <option value="astronomy@science.example.org">
</datalist>

假設使用者已在這個文字欄位輸入了「bob@example.net」並開始輸入第二個郵件以「a」為開頭的郵件地址,使用者代理可以顯示前面提到的兩個朋友跟 datalist 元素裡的「antrophy」與「astronomy」這兩個值。

sample-email-2.png
以下片段是讓電子郵件客戶端的「附件」欄位處理多個上傳檔案的方法。
<label>附件:<input type=file multiple name=att></label>
maxlength 屬性

當 maxlength 屬性適用於某 input 元素上時,它是此元素髒值標記控制的表單控制項 maxlength 屬性。

若一個 input 元素具有最大容許取值長度,則此元素的 value 屬性取值的代碼點長度必須等於或小於它的最大容許取值長度。

以下片段是讓通訊客戶端的文字欄位限制在固定的字符數之內,也迫使在這個媒介下進行的溝通是簡潔的,並阻止長篇大論。
有什么新鲜事想告诉大家?<input name=status maxlength=140>
pattern 屬性

pattern 屬性可以用來指定用來檢驗控制項取值或是取值組(元素具有multiple 屬性且它適用)的正規表示。

若網頁作者欲設定此屬性,則屬性值必須與 JavaScript 的 Pattern 產生式匹配。[ECMA262]

若一個 input 元素具有 pattern 屬性,且屬性值可以成功的作為一個停用 gobal、ignoreCase、multiline 標記的 JavaScript 正規表示編譯,則其結果稱之為此元素的編譯後正規表示模式。若元素不具有此屬性,又或屬性取值不能成功編譯,此元素不具有編譯後正規模式。[ECMA262]

約束驗證:若一個元素的取值不為空字串,且元素不具有 multiple 屬性或屬性不適用於 input 元素 type 屬性的當時狀態,且元素具有編譯後正規表示模式但該正則表示不與元素的取值整體匹配,則此元素苦於不匹配模式。

約束驗證:若一個元素的取值不為空字串,且元素具有適用的 multiple 屬性,且元素素具有編譯後正規表示模式但該正則表示不與元素取值組的每一個取值的整體匹配,則此元素苦於不匹配模式。

注:這代表此屬性用的正規表示語言,除了 pattern 屬性必須匹配整個取值而不是其中的子集(相當於在開頭有個隱藏的 ^(?,結尾有個 )$)以外,與 JavaScript 用的相同。

網頁作者在設定 input 元素的 pattern 屬性時應該在 title 屬性寫上模式的說明。使用者代理可以在需要知會告知使用者模式不匹配的情形,或是顯示工具提示,又或補助科技在控制項獲得焦距的時候,使用此屬性的值。

舉例來說,下面片段:
<label> 產品編號:
 <input pattern="[0-9][A-Z]{3}" name="part"
        title="產品編號有一位數字與三個大寫字母。"/>
</label>

可能讓使用者代理這樣提醒使用者:

產品編號有一位數字與三個大寫字母。
欄位輸入不正確時不能提交表單。

當控制項具有 pattern 屬性時, title 屬性必須是格式的描述,也可以加上幫助使用者填寫欄位的額外資訊。不然,補助科技會受到干擾。

舉例來說,若 title 屬性的內容是控制項的標題,補助科技可能會說出不太有用的話,如:「您輸入文字不符合要求的格式。生日」。

使用者代理能可以在錯誤未發生的時候(例如,鼠標在控制項上懸掛時顯示工具提示)顯示 title 屬性,因此網頁作者寫 title 的用詞不該假設錯誤已發生。

min 屬性與 max 屬性

min 屬性與max 屬性表示元素取值的容許範圍。

定義 type 屬性當時狀態的小節也定義了這兩個屬性的語法。

若一個元素具有 min 屬性,且對 min 屬性的值 使用字串至數值的轉換演算法可以得到一個數值,則該數值是元素的極小值。否則,若 type 屬性的當時狀態有定義預設極小值,則它就是極小值。否則,此元素沒有極小值。

約束驗證:當一個元素有極小值,且對此元素取值的字串使用字串至數值的轉換演算法可以得到一個數值,而且從該演算法得到的數值小於極小值,則此元素苦於過小。

min 屬性也定義了間隔基準。

若一個元素具有 max 屬性,且對 max 屬性的值 使用字串至數值的轉換演算法可以得到一個數值,則該數值是元素的極大值。否則,若 type 屬性的當時狀態有定義預設極大值,則它就是極大值。否則,此元素沒有極大值。

約束驗證:當一個元素有極大值,且對此元素取值的字串使用字串至數值的轉換演算法可以得到一個數值,而且從該演算法得到的數值大於極大值,則此元素苦於溢位。

max 屬性的值(極大值)必不可小於 min 屬性的值(極小值)。

注:若一個元素的極大值小於它的極小值,則當元素有取值的時候它會苦於過小或苦於溢位。

若一個元素有既定義的極小值與極大值則它具有範圍限制。

以下的日期控制項限制輸入為八零年代以前的日期:
<input name=bday type=date max="1979-12-31">
以下的數值控制項限制輸入為大於零的整數:
<input name=quantity required type=number min=1 value=1>
step 屬性

step 屬性表示取值透過限制輸入的值預期(並要求)的精準度。

定義 type 屬性當時狀態的小節也定義了預設間隔、間隔比例因子與部份狀況的預設間隔基準,作為下述的處理屬性的過程之用。

若網頁作者欲設定 step 屬性,其屬性值必須是能解析成大於零的數值的合法浮點數,或是一個 ASCII 不區分大小寫匹配 "any" 字串的值。

此屬性提供了元素的允許取值間隔,如下:

  1. 若元素沒有此屬性,則允許取值間隔是預設間隔與間隔比例因子的乘積。
  2. 否則,若屬性的值ASCII 不區分大小寫匹配 "any",則沒有允許取值間隔。
  3. 否則,若對屬性值使用浮點數值解析規則回傳錯誤、零、或是小於零的數值,則允許取值間隔是預設間隔與間隔比例因子的乘積。
  4. 否則,允許取值間隔是對屬性質使用浮點數值解析規則回傳的結果與間隔比例因子的乘積。

間隔基準是對 min 屬性的取值使用字串至數值的轉換演算法的結果。但是若元素沒有 min 屬性或使用上述演算法產生錯誤結果,則間隔基準是預設間隔基準(若有定義)或零。

約束驗證:當一個元素有允許取值間隔,且對此元素取值的字串使用字串至數值的轉換演算法可以得到一個數值,而且該數值減掉間隔基準不是允許取值間隔的乘數,則此元素苦於不匹配間隔。

以下範圍控制項僅接受在 0...1 的 256 個值:
<input name=opacity type=range min=0 max=1 step=0.00392156863>
以下控制項允許使用者以任何精度(例如,一千分之一秒或更細的精度)選擇當天的任何時間:
<input name=favtime type=time step=any>
一般來說,時間控制項的精度限於一分鐘。
placeholder 屬性

placeholder 屬性代表幫助使用者輸入資料的短提示(一個詞或是短句子)。提示可以是取值的範例或是預期格式的簡短描述。若網頁作者欲使用此屬性,屬性值必不可含有字符 U+000A LINE FEED (LF) 或 U+000D CARRIAGE RETURN (CR)。

注:如果想使用較長的提示或是其他內容,title 屬性比較合適。

placeholder 屬性不應該用來當作 label 的替代方案。

當元素的取值是空字串且控制項尚未獲得焦距時,使用者代理應該從此提示剝離換行符然後呈現給使用者(例如在空白且沒有焦距的控制項裡顯示)。

這是一個使用 placeholder 屬性的信箱設定的使用者界面例。
<fieldset>
 <legend>信箱帳號</legend>
 <p><label>姓名:<input type="text" name="fullname" placeholder="John Ratzenberger"></label></p>
 <p><label>信箱:<input type="email" name="address" placeholder="john@example.net"></label></p>
 <p><label>密碼:<input type="password" name="password"></label></p>
 <p><label>描述:<input type="text" name="desc" placeholder="我的信箱帳號"></label></p>
</fieldset>
input 元素的共通 API

此区块中不是标准描述,实现要求在下面给出。

input . value [ = value ]

返回表单控件的当前值。

可以被设置,用来修改表单控件的当前值。

对于文件上传控件,如果将其值设为空字符串以外的任意的值,则抛出一个INVALID_STATE_ERR异常。

input . checked [ = value ]

返回表单控件的当前选中状态。

可以被设置,用来修改表单控件的当前选中状态。

input . files

返回一个列出表单控件的选中文件的FileList对象。

如果控件不是文件控件,则返回null。

input . valueAsDate [ = value ]

如果存在能够表示表单控件的值的Date对象,则返回该对象,否则返回null。

可以被设置,用来修改表单控件的当前值。

如果控件不是基于时间或日期的,则抛出一个INVALID_STATE_ERR异常。

input . valueAsNumber [ = value ]

如果存在能够表示表单控件的值的数值,则返回该数值,否则返回null。

可以被设置,用来修改表单控件的当前值。

如果控件既不是基于时间或日期的,也不是数值,则抛出一个INVALID_STATE_ERR异常。

input . stepUp( [ n ] )
input . stepDown( [ n ] )

根据表单控件的step属性,以n为倍数,修改表单控件的值。n的默认值为1。

如果控件既不是基于时间或日期的也不是数值,如果step属性的值为“any”,如果不能解析当前值,如果在给定的方向步进给定的值会造出结果超出范围,则抛出一个INVALID_STATE_ERR异常。

input . list

返回list属性指定的datalist元素。

input . selectedOption

返回list属性指定的datalist元素中匹配表单元素的值的option元素。

value IDL属性允许脚本控制一个input元素的值。该属性在下列各模式中各自定义了其行为:

  • value
    • 在获取时,必须返回该元素的当前值。在设置时,必须设元素的值为新值,设元素的脏值标记为真,之后,如果该元素的type属性的当前状态定义了一个值处理算法,则调用该算法。
  • default
    • 在获取时,如果元素拥有value属性,则必须返回该属性的值;否则,必须返回空字符串。在设置时,必须将该元素的value属性设为新值。
  • default/on
    • 在获取时,如果元素拥有value属性,则必须返回该属性的值;否则,必须返回字符串“on”。在设置时,必须将该元素的value属性设为新值。
  • filename
    • 在获取时,如果选中文件列表中存在文件,则必须返回字符串“C:\fakepath\”其后跟随选中文件列表中第一个文件的文件名,或者如果列表为空,则返回空字符串。在设置时,如果新值为空字符串,则必须清空选中文件列表;否则,必须抛出一个INVALID_STATE_ERR异常。
      注:“fakepath”要求是一个可悲的历史意外。了解更多信息请参阅文件上传状态章节的示例。

checked IDL属性允许脚本控制一个input元素的选中状态。在获取时,必须返回该元素的当前选中状态;在设置时,必须将该元素的选中状态设为新值并设该元素的脏选中状态为真。

files IDL属性允许脚本访问当前元素的选中文件。在获取时,如果应用的该IDL属性,必须返回一个表示当前选中文件的FileList对象。在选中文件发生变化之前每次获取必须都返回同一个对象。如果没有应用该IDL属性,则必须返回null。[FILEAPI]

valueAsDate IDL属性表示当前元素的值,并将其解释为一个日期。

在获取时,如果没有应用input元素的type属性的当前状态所定义的valueAsDate,则返回null。否则,执行该状态所定义的将字符串转换为Date对象的算法;如果该算法返回一个Date对象,则返回该对象,否则返回null。

在设置时,如果没有应用input元素的type属性的当前状态所定义的valueAsDate,则抛出一个INVALID_STATE_ERR异常;否则,如果新值为null,则将元素的值设为空字符串;否则,执行该状态所定义的将Date对象转换为字符串的算法,并将元素的值设为返回的字符串。

valueAsNumber IDL属性表示当前元素的值,并将其解释为一个数值。

在获取时,如果没有应用input元素的type属性的当前状态所定义的valueAsNumber,则返回一个非数值(NaN)值。否则,如果应用了valueAsNumber属性,则执行该状态所定义的将字符串转换为Date对象的算法;如果该算法返回一个Date对象,则返回该对象的时间值(从UTF时区下1970-01-01凌晨零点到Date对象所表示的时间的毫秒数),否则,返回一个非数值(NaN)值。否则,执行该状态所定义的将字符串转换为数值的算法;如果该算法返回一个数值,则返回该数值,否则,返回一个非数值(NaN)值。

在设置时,如果没有应用input元素的type属性的当前状态所定义的valueAsNumber,则抛出一个INVALID_STATE_ERR异常;否则,如果应用了valueAsNumber属性,则执行该状态所定义的将Date对象转换为字符串的算法,其中的Date对象的时间值为新值,并将元素的值设为返回的字符串。否则,执行该状态所定义的将数值转换为字符串的算法,并将元素的值设为返回的字符串。

当调用stepDown(n)和stepUp(n)方法是,必须执行下列算法:

  1. 如果没有应用input元素的type属性的当前状态所定义的stepDown()和stepUp()方法,则抛出一个INVALID_STATE_ERR异常并跳过这些步骤。
  2. 如果元素没有允许的步长值,则抛出一个INVALID_STATE_ERR异常并跳过这些步骤。
  3. 如果对当前元素的值所给出的字符串应用将字符串转换为数值的算法返回一个错误,则抛出一个INVALID_STATE_ERR异常并跳过这些步骤;否则,设值为该算法返回的结果。
  4. 设n为传入的参数,或者,如果忽略了参数则设为1。
  5. 设变化量为允许的步长值的n倍。
  6. 如果调用的方法是stepDown(),则对变化量取其负值。
  7. 设值为值加上变化量的结果。
  8. 如果元素拥有最小值,且值小于该最小值,则抛出一个INVALID_STATE_ERR异常。
  9. 如果元素拥有最大值,且值大于该最大值,则抛出一个INVALID_STATE_ERR异常。
  10. 设值的字符串形式为使用值执行input元素的type属性的当前状态所定义的将数值转化为字符串的算法的返回值。
  11. 将当前元素的值设为值的字符串形式。

如果当前元素拥有建议源元素,则list IDL属性必须返回当前的建议源元素,否则返回null。

selectedOption IDL属性必须返回有下列步骤确定的值:

  1. 如果不存在建议源元素(例如由于没有应用或没有标记list属性),则返回null并跳过这些步骤。
  2. 如果标记且应用了multiple属性,则返回null并跳过这些步骤。(没有应用selectedOption IDL属性。)
  3. 返回作为建议源元素子元素,且其值匹配input元素的值的,在树形结构顺序中的第一个option元素。如果建议源元素中没有符合条件的option元素,则返回null。
共通事件行為

若应用了input事件,每当用户造成元素的值发生变化,则用户代理必须排入一个任务来在input元素上冒泡地触发一个简单事件,该事件名为input。在排入任务之前,用户代理可能会等待用户交互中的恰当的中断;距离说明,用户代理可以等待用户连续100毫秒没有点击按键,这样只会在用户暂停时才触发事件,而不会在每次击键时连续的触发事件。

用户修改元素值的例子包括用户向文本字段输入内容、向字段粘贴一个新值或在字段内撤销之前的编辑。某些用户交互不会造成值得变化,例如在一个空的文本字段中点击“删除”键或将字段替换为剪贴板中恰好与该字段当前的内容完全相同的文本。

若应用了change事件,如果当前元素没有定义激活行为,但使用了一个包括明确的提交行为的用户界面,则每当用户提交一个对当前元素的值或选中文件列表的修改时,用户代理必须排入一个任务来在input元素上冒泡地触发一个简单事件,该事件名为change。

包括提交行为的用户界面的例子是一个文件上传控件,该控件包含一个用于弹出文件选择对话框的单一的按钮:当该对话框关闭时,如果返回的选中文件发生变化,则用户提交了一个新的选中文件。
包括提交行为的用户界面的另一个例子是一个日期控件,该控件同时允许基于文本的用户输入和从下拉日历中进行选择:文本输入可能没有一个明确的提交步骤,但从下拉日历中选择一个日期后的收回下拉日历是一个提交行为。

若用户代理代表用户修改了元素的值(例如,表单预填功能的一部分),用户代理必须执行下列步骤:

  1. 如果应用了input事件,则排入一个任务来在input元素上冒泡地触发一个简单事件,该事件名为input。
  2. 如果应用了change事件,则排入一个任务来在input元素上冒泡地触发一个简单事件,该事件名为change。
注:另外,如果应用了change事件,change事件还可以作为元素的激活行为和失去焦点步骤的一部分被触发。

这些任务的任务源是用户交互任务源。