我不知道的HTML5表單

沒錯,這篇文章的標(biāo)題是我不知道的表單登錄拦惋。為啥這么說呢憎亚,因為我上次看HTML是兩三年前的事情了员寇,那時候看表單只是單純的把表單當(dāng)成一種結(jié)構(gòu),一個語義化的標(biāo)簽第美,而沒有詳細(xì)的去看表單究竟能做什么丁恭。這確實是一種不建議的學(xué)習(xí)方式,囫圇吞棗只求快速上手斋日,卻連棗長啥樣都不知道。說回正題墓陈,這里主要介紹一些有意思的HTML5表單行為恶守,好讓我知道,其實登錄可以寫得更優(yōu)雅點(diǎn)贡必。
接下來我會列舉表單登錄中遇到的一些有意思的事情兔港,主要包括以下幾個方面:

  • 表單自動填充
  • 請求參數(shù)顯示在地址欄
  • 表單驗證

表單自動填充

表單自動填充

一般來講,如果你曾今登錄過一個網(wǎng)站仔拟,并且點(diǎn)擊了記住密碼衫樊,那么當(dāng)你第二次登錄該網(wǎng)站的時候,瀏覽器會自動幫你填充表單信息利花,你只需要很方便的點(diǎn)擊「登錄」即可進(jìn)入科侈,而無需再重復(fù)輸入。瀏覽器的這種行為確實方便了不少的用戶炒事,使得登錄一步到位臀栈,但是,作為開發(fā)者而言挠乳,我們有沒有辦法去限定瀏覽器不要自動填充網(wǎng)頁表單呢权薯?答案是肯定的姑躲。
翻看MDN文檔中關(guān)于form表單這一部分,可以看到autocomplete這個字段

用于指示 input 元素是否能夠擁有一個默認(rèn)值盟蚣,這個默認(rèn)值是由瀏覽器自動補(bǔ)全的黍析。這個設(shè)定可以被屬于這個form的子元素的 autocomplete 屬性重載(覆蓋)。 可能的值有:

  • off: 在每一個用到的輸入域里屎开,用戶必須顯式的輸入一個值阐枣,或者document 以它自己的方式提供自動補(bǔ)全;瀏覽器不會自動補(bǔ)全輸入牍戚。
  • on: 瀏覽器能夠根據(jù)用戶之前在form里輸入的值自動補(bǔ)全侮繁。

這段話的意思很明確了,如果想禁止瀏覽器自動填充表單信息如孝,那么應(yīng)該在表單的屬性里使得autocomplete設(shè)置為off宪哩,這個屬性也可以對表單下的input使用,以做更靈活的配置第晰。需要注意的一點(diǎn)是锁孟,在chrome瀏覽器上,如果要使得所有表單都不自動填充茁瘦,那么需要顯式的設(shè)置每一項inputautocomplete="off"品抽。

請求參數(shù)顯示在地址欄?

一開始做表單登錄的時候很容易的就被我忽略了這個問題甜熔,測試成功不會出現(xiàn)圆恤,失敗了也沒有注意到地址欄的變化,直到后面需要調(diào)試POST請求的時候腔稀,才發(fā)現(xiàn)在開發(fā)者工具里無法獲取盆昙,或者說是因為失敗的時候同步刷新了整個頁面導(dǎo)致無法獲取到有效的信息。注意到這里的時候焊虏,我梳理了以下兩個問題:

  1. 登錄失敗會刷新整個頁面
  2. POST的參數(shù)同步出現(xiàn)在地址欄

第二點(diǎn)在瀏覽器中的具體表現(xiàn)為:

登陸前:http://localhost:3000
登錄失敗后:http://localhost:3000/?username=test&password=1222#/

解決方法也很簡單淡喜,主要的思路就是監(jiān)聽表單的submit事件,在表單提交的時候取消默認(rèn)動作,具體處理方式如下:

//Vue 組件
//login為表單的處理方法
<form @submit.prevent="login">
  <input type="text" />
  <button type="submit">提交</button>
</form>

//原生處理方法
var form = document.getElementById('formId');
form.onsubmit = function(e) {
    //在此處理邏輯
    //取消事件的默認(rèn)動作
    e.preventDefault();
}

講到這里順便說下表單的提交方式,主要為以下兩種:

  1. <form action="yourPostUrl" method="post">
  2. ajax的post請求

第一種方式提交表單信息主要用于登錄来屠,優(yōu)點(diǎn)就是常用、語義化瘟芝,少了一些不必要的麻煩;缺點(diǎn)也很明顯润歉,無法獲取響應(yīng)信息模狭,一般form表單登錄之后都是由后端去處理邏輯,并且由后端重定向到某個頁面踩衩。那么嚼鹉,如果前端是單頁應(yīng)用SPA怎么辦贩汉?解決方法不止一種,這里采用后端邏輯處理完響應(yīng)給前端信息锚赤,由前端做跳轉(zhuǎn)操作匹舞,也就是第二種表單提交方式,通過ajax post

import axios from 'axios'
//采用qs庫對提交參數(shù)進(jìn)行處理
import qs from 'qs'
//這里采用axios
let param = {
    username: 'xxx',
    password: 'xxx'
}
//這里有坑的地方在线脚,你post的參數(shù)必須經(jīng)過特殊編碼處理
axios.post('yourPostUrl', qs.stringify(param)).then(() => {
    //成功
}).catch(() => {
    //失敗
})

表單驗證

表單驗證在我的印象里一直以來都是JS在處理赐稽,重新看了HTML5的form文檔后,我才知道原來有一些簡單的驗證交給表單的相關(guān)屬性就好了

根據(jù)type驗證

HTML5在<input>內(nèi)置了很多type浑侥,如果設(shè)置了某些特定的type屬性姊舵,那么瀏覽器自動對用戶的輸入進(jìn)行驗證,比如設(shè)置了<input type="url" />

type=url

根據(jù) min/max 進(jìn)行驗證

當(dāng)設(shè)置的type為number時寓落,還可以同時設(shè)置輸入的最大值和最小值括丁,比如<input type="number" max="2.5" />

限定最大值

讓表單成為必填

如果某個字段是必填的,可以給它添加required屬性伶选,支持這個屬性的瀏覽器可能會做出一些外觀/交互上的變化史飞,比如<input type="text" required>

限定不能為空

總結(jié)

以上列舉的只是我在工作中偶然發(fā)現(xiàn)的一些問題,HTML5表單的很多新特性沒有貼出來仰税。在此感慨HTML5強(qiáng)大的同時构资,也對自己忽略了這些而慚愧,很多事情如果不持續(xù)學(xué)習(xí)很容易就被時代拋棄陨簇,比如web技術(shù)吐绵,如果不知道表單新特性,而通過js來模擬驗證反而耗費(fèi)多一些時間河绽,而且不知道出啥錯拦赠。嗯,告誡自己持續(xù)學(xué)習(xí)吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葵姥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子句携,更是在濱河造成了極大的恐慌榔幸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矮嫉,死亡現(xiàn)場離奇詭異削咆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蠢笋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門拨齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昨寞,你說我怎么就攤上這事瞻惋∠寐耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵歼狼,是天一觀的道長掏导。 經(jīng)常有香客問我,道長羽峰,這世上最難降的妖魔是什么趟咆? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮梅屉,結(jié)果婚禮上值纱,老公的妹妹穿的比我還像新娘。我一直安慰自己坯汤,他們只是感情好虐唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玫霎,像睡著了一般凿滤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庶近,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天翁脆,我揣著相機(jī)與錄音,去河邊找鬼鼻种。 笑死反番,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叉钥。 我是一名探鬼主播罢缸,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼投队!你這毒婦竟也來了枫疆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤敷鸦,失蹤者是張志新(化名)和其女友劉穎息楔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扒披,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡值依,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碟案。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿险。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖价说,靈堂內(nèi)的尸體忽然破棺而出辆亏,到底是詐尸還是另有隱情风秤,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布褒链,位于F島的核電站唁情,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甫匹。R本人自食惡果不足惜甸鸟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兵迅。 院中可真熱鬧抢韭,春花似錦、人聲如沸恍箭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扯夭。三九已至鳍贾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間交洗,已是汗流浹背骑科。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留构拳,地道東北人咆爽。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像置森,于是被迫代替她去往敵國和親斗埂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

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

  • 接上 關(guān)于HTML/HTML5(一)http://www.reibang.com/p/33fc7840c079 學(xué)...
    Amyyy_閱讀 791評論 0 4
  • HTML表單 在HTML中凫海,表單是 ... 之間元素的集合呛凶,它們允許訪問者輸入文本、選擇選項行贪、操作對象等等把兔,然后將...
    蘭山小亭閱讀 3,418評論 2 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)瓮顽,斷路器,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • HTML5 新的表單元素 HTML5 有以下新的表單元素: < datalist> 注意:不是所有的瀏覽器都支持H...
    hx永恒之戀閱讀 612評論 0 2
  • 并不是你的生活過得不好围橡,可能是因為你自己不懂得怎樣去生活暖混。 當(dāng)你自己總是覺得自己沒錢,看到好吃的東西不敢...
    朗朗讀書者閱讀 297評論 3 1