DOM 編程藝術(shù)——表單操作

1.表單元素

編寫表單的三個步驟:構(gòu)建表單珍昨,服務(wù)器端處理,配置表單

以披薩預(yù)定表單為例

構(gòu)建表單

構(gòu)建完表單兔毙,需要服務(wù)器端提供相應(yīng)的接口處理用戶提交的數(shù)據(jù)兄春。

服務(wù)器端處理的基本信息:

https://pizza.example.com/order ? ?服務(wù)器端提供的接口地址

application/x-www-form.urlencoded ? ? ? 服務(wù)器端接收的數(shù)據(jù)需要我們用 URL 方式編碼

custname,custtel,custemail,size,topping,delivery ? ? ? 接口接受的參數(shù)信息

配置表單

form 元素中的 method 定制請求方式赶舆,action 指定服務(wù)器端用來接收數(shù)據(jù)的接口地址,enctype 指定提交數(shù)據(jù)的名稱

區(qū)分每個按鈕芜茵,用 value 做屬性標識九串,可以給多個控件指定相同名稱,服務(wù)器端根據(jù)是否提交了對應(yīng)的 value 值判斷用戶是否選擇了相應(yīng)的選擇框猪钮。

驗證表單:用戶必須提供的信息,在元素上增加 required 屬性谆奥。若提交表單時未提供相應(yīng)信息拂玻,出現(xiàn)提示信息告訴用戶。


form 元素

form 的屬性標識 form 的不同特性魄懂。

1.name

通過 document.form API使用闯第,用 name 拿到 form 的節(jié)點元素

2.autocomplete

有 on 和 off 兩個值,為 on 時在填寫過程中會出現(xiàn)輸入過的值作為候選填帽,off 則不出現(xiàn)咙好。

有時設(shè)為 off 還會出現(xiàn)提示信息,與瀏覽器設(shè)置有關(guān)(密碼和表單——自動填充設(shè)置)勾效,可以在不需要默認填寫的 input 框中設(shè)置 autocomplete = “new-password”

3.elements?

elements 集合是動態(tài)節(jié)點集合

(1)該表單子孫表單控件(除圖片按鈕)

表單控件:button,fieldset杨伙,input,keygen抖苦,object膛腐,output,select,textarea

圖片按鈕:<input type = "image">

(2)歸屬于該表單的表單控件

<p><label><input name='d' form='f'></label></p>

有 input 元素的 form 屬性指定這個元素歸屬于 id 為 f 的表單贸伐,也在 elements 集合中。

4.length

等價于 elements.length 主要用于標識節(jié)點集合里面所包含的元素的個數(shù)

5.用 form 取到表單控件的方法

form.elements[index] ? ? ? ? ?form.elements[name]

form[index] ? ? ? ? ? ? ? ? ? ? ? ? form[name]

6.form[name]

通過名稱作為索引取到 input 元素

返回 id 或 name 為指定名稱的表單控件(除圖片按鈕)

如果結(jié)果為空脯丝,則返回 id 為指定名稱的 img 元素

如果有多個同名元素伏伐,則返回這些元素的節(jié)點集合

一旦用指定名稱取過該元素,則不管該元素的 id 或者 name 怎么變化材蹬,只要節(jié)點還在頁面上吝镣,均可使用原名稱獲得該元素。

7.form 的 reset() 接口

可重置元素:input闸溃,keygen拱撵,output,select乓旗,textarea

觸發(fā)表單 reset 事件昼扛,阻止該事件的默認行為可取消重置

元素重置時不再觸發(fā)元素上的 change 和 input 事件


label 元素

<label for='txtId' form='formId'> 三個屬性 htmlFor control form

for 屬性將標簽關(guān)聯(lián)到具體表單控件欲诺,指定 for 以后渺鹦,瀏覽器會自動生成 control 屬性,用來標識當前這個 label 關(guān)聯(lián)的表單控件的節(jié)點

form 屬性表示 label 所歸屬的表單塞颁,由瀏覽器動態(tài)生成吸耿。

1.htmlFor

關(guān)聯(lián)表單控件激活行為

可關(guān)聯(lián)元素:button,input(除hidden外)咽安,keygen妆棒,meter,output糕珊,progress,select澜公,textarea

label 和表單控件關(guān)聯(lián)以后喇肋,點擊 label 的行為和表單控件的行為保持一致。

2.control

如果指定了 for 屬性糊渊,則為該 for 屬性對應(yīng) Id 的可關(guān)聯(lián)元素

如果沒有指定 for 屬性慧脱,則為第一個子孫可關(guān)聯(lián)元素

3.form

關(guān)聯(lián)歸屬表單(所有表單控件都有這個屬性)

可關(guān)聯(lián)元素:button,fieldset菱鸥,input,keygen氮采,label,object主到,output,select畔师,textarea

只讀屬性牧牢,不可在程序中修改


select 元素

select 元素的屬性與接口

name 表單提交時的名稱,form.element 中用名字做索引值取節(jié)點

value 第一個選中選項的值塔鳍,沒有選中為空

multiple 多選控制

options 所有選項集合

selectedOptions 選中選項集合

selectedIndex 第一個選中選項的索引轮纫,沒選中返回 -1

add(element[,before]) 在指定位置之前添加選項,沒指定參照物在最后添加

remove([index]) 刪除某個選項

optgroup 屬性

disabled 當前分組所有選項不可選

label 必須有蜡感,對分組說明

option 屬性

disabled 當前選項不可選

label 對選項說明

value 提交表單時的數(shù)據(jù)信息

text 顯示在頁面上用戶看到的文字

index 當前選擇索引值

selected 表示選項是否被選中

defaultSelected 表示默認情況下選項是否被選中

select 選項操作

創(chuàng)建選項:

document.createElement ? ? ? ? ? ? ? ?new Option([text[,value[,defaultSelected[,selected]]]])

添加選項:insertBefore ? ? ? ? ? ? ? ? ? select.add

刪除選項:removeChild ? ? ? ? ? ? ? ? ?select.remove

textarea 元素

name 表單提交時的名稱郑兴,form.element 中用名字做索引值取節(jié)點

value 用戶輸入信息

select() 全選當前輸入內(nèi)容

selectStart 選中內(nèi)容的起始位置贝乎,沒選中內(nèi)容返回光標位置

selectEnd 選中內(nèi)容的結(jié)束位置,沒選中內(nèi)容返回光標位置

selectDirection 返回選擇的方向却舀,可設(shè)置 forward锤灿,backward

setSelectionRange(start,end[,direction]) 可用程序選中某些內(nèi)容

setRangeText(replacement[,start,end[,mode]]) 用來設(shè)置某個范圍的內(nèi)容


selectDirection 用來控制鍵盤上 shift + 方向鍵 選擇內(nèi)容的行為,當 selectDirection 為 forward 時螃诅,Shift + 方向鍵 操作 selectEnd 位置状囱;為 backward 時操作 selectStart 位置。


2.表單驗證

驗證元素

可驗證元素:button袭艺,input叨粘,select瘤睹,textarea

以下情況不做驗證:

input 元素答倡,type 屬性為 hidden,reset绸吸,button

button 元素设江,type 屬性為 reset,button

input 元素或 textarea 元素有 readonly 屬性

作為 datalist 子節(jié)點的元素

設(shè)置了 disabled 屬性的元素


驗證涉及到的屬性码俩,接口(每一個可驗證元素都可調(diào)用)

willValidate:標明元素在表單提交時是否被驗證

checkValidity():用來驗證元素歼捏,通過驗證返回 true,否則觸發(fā)元素上的 invalid 事件

validity:用于存儲驗證結(jié)果

validationMessage:用于顯示驗證的異常信息

setCustomValidity(message):傳入自定義消息用來設(shè)置異常情況下要顯示什么樣的信息


validity 存儲驗證過程中可能涉及的錯誤信息(這些值用于判斷值是否通過?)

valueMissing:設(shè)置了 required 沒有 value瓣履,值為 true 驗證失敗

typeMismatch:value 與使用?type 不符

patternMismatch:value 與 pattern 不匹配

tooLong:value 長度超過 maxlength 指定的長度

tooShort:value 長度小于 minlength 指定的長度

rangeUnderflow:value 值小于 min 指定的值

rangeOverflow:value 值大于 max 指定的值

stepMismatch:value 值不符合 step 指定的值

badInput:輸入不完整

customError: 使用 setCustomValidity 設(shè)置了自定義錯誤

valid:符合驗證條件练俐,true 表示驗證通過


自定義異常

禁止驗證

在表單元素上添加 novalidate 屬性腺晾,禁止表單提交時對表單的可驗證元素做表單驗證


3.表單提交

隱式提交

如:聚焦在輸入框時按回車提交表單

滿足以下任一條件

表單有非禁用的提交按鈕

沒有提交按鈕時,不超過一個元素悯蝉,類型為 text鼻由,search,url嗡靡,email,password歉井,date哈误,time躏嚎,number 之一


提交過程

瀏覽器根據(jù)表單 enctype 指定的值構(gòu)建要提交的數(shù)據(jù)結(jié)構(gòu)

使用 method 指定的方式發(fā)送數(shù)據(jù)到 action 指定的目標


瀏覽器構(gòu)建提交數(shù)據(jù)

從可提交元素中提取數(shù)據(jù)組裝成指定數(shù)據(jù)結(jié)構(gòu)的過程

可提交元素:button卢佣,input箭阶,keygen虚茶,object仇参,select诈乒,textarea


編碼方式(enctype)

application/x-www-form-urlencode[默認] ?數(shù)據(jù)格式為用 & 分隔的鍵值對

multipart/form-data 字節(jié)流格式,大多數(shù)文件上傳形式

text/plain 用換行符分隔的鍵值對怕磨,用于閱讀


特殊案例

name = 'isindex' && type = ‘text’

編碼方式為 application/x-www-form-urlencode

作為表單的第一個元素

提交時只發(fā)送 value 值肠鲫,不包含 name

name = '_charset_' && type = 'hidden'

沒有設(shè)置 value 值

提交時 value 自動用當前提交的字符集填充(_charset_=UTF-8)


可以通過調(diào)用 form 上的 submit() 用程序提交表單 form.submit()


onsubmit

表單提交事件

提交之前的數(shù)據(jù)驗證

阻止事件的默認行為可取消表單提交 event.preventDefault()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末导饲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帜消,更是在濱河造成了極大的恐慌浓体,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娄猫,死亡現(xiàn)場離奇詭異生闲,居然都是意外死亡媳溺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門碍讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬蔽,“玉大人,你說我怎么就攤上這事捉兴⌒В” “怎么了录语?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禾乘。 經(jīng)常有香客問我澎埠,道長始藕,這世上最難降的妖魔是什么蒲稳? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮伍派,結(jié)果婚禮上江耀,老公的妹妹穿的比我還像新娘。我一直安慰自己拙已,他們只是感情好决记,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倍踪,像睡著了一般系宫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上建车,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天扩借,我揣著相機與錄音,去河邊找鬼缤至。 笑死潮罪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的领斥。 我是一名探鬼主播嫉到,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼月洛!你這毒婦竟也來了何恶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤嚼黔,失蹤者是張志新(化名)和其女友劉穎细层,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唬涧,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡疫赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碎节。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧搞。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出实牡,到底是詐尸還是另有隱情陌僵,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布创坞,位于F島的核電站碗短,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏题涨。R本人自食惡果不足惜偎谁,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纲堵。 院中可真熱鬧巡雨,春花似錦、人聲如沸席函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茂附。三九已至正蛙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間营曼,已是汗流浹背乒验。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒂阱,地道東北人锻全。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像录煤,于是被迫代替她去往敵國和親鳄厌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 構(gòu)建表單 → 服務(wù)器處理 → 配置表單 1妈踊、內(nèi)容元素部翘、驗證、提交 2响委、元素⑴form①name②autocomp...
    Marks閱讀 206評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)窖梁,斷路器赘风,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 表單基礎(chǔ)知識 在HTML中,表單是由 元素來表示的纵刘,而在JS中邀窃,表單對應(yīng)的則是HTMLFormElement類型。...
    oWSQo閱讀 903評論 0 1
  • element.chidren和element.childNodes的區(qū)別 element.children是El...
    cheerss閱讀 446評論 0 1
  • 度假山莊,來來往往的旅客數(shù)不勝數(shù)瞬捕,有住一兩個月的鞍历,也有住一兩天的。 短期住宿的一般會點菜肪虎,長期住宿的就由山莊老板提...
    秭歸橙子和水果閱讀 160評論 0 1