jQuery Mobile框架中的表單組件基礎(chǔ)使用教程
一.表單組件基礎(chǔ)
1.組件簡(jiǎn)介
jQuery Mobile 中的表單組件是基于標(biāo)準(zhǔn) HTML ,然后在此基礎(chǔ)上增強(qiáng)樣式,因此即使瀏覽器不支持 jQuery Mobile 表單仍可正常使用。需要注意的是, jQuery Mobile 會(huì)把表單元素增強(qiáng)為觸摸設(shè)備很容易使用的形式,因此對(duì)于 iphone/ipad 與 Android 使用 Web 表單將會(huì)變得非常方便。
jQuery Mobile 的表單組件有以下幾種:
(1)文本輸入框, type="text" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng)為 jQuery Mobile 樣式,無需額外添加 data-role 屬性。
(2)文本輸入域, textarea 元素會(huì)被自動(dòng)增強(qiáng),無需額外添加 data-role 屬性,用于多行輸入文本,jQuery Mobile 會(huì)自動(dòng)增大文本域的高度,避免在移動(dòng)設(shè)備中很難找到滾動(dòng)條的情況。
(3)搜索輸入框, type="search" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng),無需額外添加 data-role 屬性,這是一個(gè)新的 HTML 元素,增強(qiáng)后的輸入框左邊有一個(gè)放大鏡圖標(biāo),點(diǎn)擊觸發(fā)搜索,在輸入內(nèi)容后,輸入框的右邊還會(huì)出現(xiàn)一個(gè)叉的圖標(biāo),點(diǎn)擊清除已輸入的內(nèi)容,非常方便。
(4)單選按鈕, type="radio" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng),無需額外添加 data-role 屬性。
(5)復(fù)選按鈕, type="checkbox" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng),無需額外添加 data-role 屬性。
(6)選擇列表, select 元素會(huì)被自動(dòng)增強(qiáng),無需額外添加 data-role 屬性。
(7)劃桿, type="range" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng),無需額外添加 data-role 屬性。
(8)開關(guān), select 元素添·加 data-role="slider" 屬性后會(huì)被增強(qiáng)會(huì) jQuery Mobile 的開關(guān)組件, select 中只能有兩個(gè) option。
2.組件使用規(guī)范
所有的表單組件,只要是需要與服務(wù)器傳送數(shù)據(jù),都應(yīng)該包裹在一個(gè) form 標(biāo)簽內(nèi),并且應(yīng)該指定好 form 的 action 和 method 屬性。當(dāng)然如果你使用的是 Web SQL Database 這類本地儲(chǔ)存,即數(shù)據(jù)并不需要與服務(wù)器傳送,可以不用 form 標(biāo)簽和 sumbit 提交。另外 form 的 id 需要在整站中唯一,由于 jQuery Mobile 使用 Ajax 導(dǎo)航,因此不同的 page 可以同時(shí)加載到一個(gè) DOM 中,因此 form id 必須整站唯一以保證每個(gè) DOM 的表單 id 都是不同的。
每一個(gè)表單元素應(yīng)該要有相應(yīng)的 label 對(duì)應(yīng),label 的 for 值要與元素的 id 相同,使其在語義上相關(guān),并且可以使用一個(gè)帶有 data-role="fieldcontain" 屬性的 div 或 fieldset 容器包裹, jQuery Mobile 會(huì)自動(dòng)在容器底部增加一條細(xì)邊框作為分隔。
二.表單組件詳解
1.文本輸入框
在 jQuery Mobile 中,文本輸入框和文本輸入域都是使用標(biāo)準(zhǔn) HTML 標(biāo)記的,并且支持一些 HTML5 的 input 類型,如 password, email, tel, number, range 等更多的類型,而對(duì)于一些類型( range, serach ) jQuery Mobile 則會(huì)將其轉(zhuǎn)換為 text 的 input 類型,統(tǒng)一標(biāo)準(zhǔn)化其樣式,下面是文本輸入框的調(diào)用代碼及示圖。
<div data-role="fieldcontain"> <label for="text">文本輸入框</label> <input type="text" name="text" id="text" value="" /> </div>
2.文本輸入域
<div data-role="fieldcontain"> <label for="textarea">文本輸入域</label> <textarea cols="40" rows="8" name="textarea" id="textarea"></textarea> </div>
3.搜索輸入框
正如上文所述,增強(qiáng)后的輸入框左邊有一個(gè)放大鏡圖標(biāo),點(diǎn)擊觸發(fā)搜索,在輸入內(nèi)容后,輸入框的右邊還會(huì)出現(xiàn)一個(gè)叉的圖標(biāo),點(diǎn)擊清除已輸入的內(nèi)容。
<div data-role="fieldcontain"> <label for="search">搜索輸入框</label> <input type="search" name="search" id="search" value="" /> </div>
4.單選框
單選框組件用于在頁面中提供一組選項(xiàng),并且只能選擇其中一個(gè)選項(xiàng)。在 jQuery Mobile 中,單選框組件不但在外觀上美化了,還增加了一些圖標(biāo)用于增強(qiáng)視覺反饋。 type="radio" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng)為單選框組件,但 jQuery Mobile 建議開發(fā)者使用一個(gè)帶 data-role="controlgroup" 屬性的 fieldset 標(biāo)簽包括選項(xiàng),并且在 fieldset 內(nèi)增加一個(gè) legend 元素,用于表示該單選框的標(biāo)題。
<div data-role="fieldcontain"> <fieldset data-role="controlgroup"> <legend>單選框:</legend> <input type="radio" name="radio-choice-1" id="radio-choice-1" value="choice-1" /> <label for="radio-choice-1">藍(lán)</label> <input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2" /> <label for="radio-choice-2">綠</label> <input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3" /> <label for="radio-choice-3">黑</label> </fieldset> </div>
5.復(fù)選框
復(fù)選框也是用于在頁面中提供一組選項(xiàng)的,但可以同時(shí)選擇多個(gè)選項(xiàng)。與單選框相同,復(fù)選框組件也無需額外調(diào)用 data-role 屬性, type="checkbox" 標(biāo)記的 input 元素會(huì)自動(dòng)增強(qiáng)為 jQuery Mobile 樣式,當(dāng)然 jQuery Mobile 也建議開發(fā)者使用一個(gè)帶 data-role="controlgroup" 屬性的 fieldset 標(biāo)簽包括選項(xiàng),并且在 fieldset 內(nèi)增加一個(gè) legend 元素,用于表示該復(fù)選框的標(biāo)題。
<div data-role="fieldcontain"> <fieldset data-role="controlgroup"> <legend>復(fù)選框</legend> <input type="checkbox" name="blue" id="effect1" class="custom" /> <label for="effect1">效果1</label> <input type="checkbox" name="green" id="effect2" class="custom" /> <label for="effect2">效果2</label> <input type="checkbox" name="pink" id="effect2" class="custom" /> <label for="effect2">效果3</label> </fieldset> </div>
默認(rèn)的復(fù)選框組件是垂直排列選項(xiàng)的,我們可以在 fieldset 上添加 data-type="horizontal" 使其樣式改為水平按鈕組的樣式, jQuery Mobile 會(huì)使選項(xiàng)元素浮動(dòng)并去掉圖標(biāo)。
6.選擇列表
選擇列表是基于 HTML select 元素的,具有原生菜單和自定義菜單兩種形式,原生菜單與自定義菜單都有一個(gè)樣式美化了的選擇按鈕,不同的是在自定義菜單中原生的 option 元素將被隱藏, jQuery Mobile 會(huì)生成一個(gè)由 CSS3 和 HTML5 構(gòu)成的菜單代替,并且這個(gè)菜單是 ARIA 的。
關(guān)于 ARIA ,這里小科普一下: ARIA, 即 Accessible Rich Internet Application ( 加強(qiáng)無障礙網(wǎng)頁應(yīng)用程序 ),它是 W3C 的無障礙網(wǎng)頁倡議(WAI)工作小組在倡導(dǎo)大家使用的無障礙網(wǎng)頁應(yīng)用技術(shù)。它是一套獨(dú)立的規(guī)范,可以幫助 Web 程序,尤其是使運(yùn)用了大量前端技巧( Ajax )的網(wǎng)頁更具備可訪問性,通俗點(diǎn)說,讀屏設(shè)備等不大能理解前端語義的設(shè)備將可以了解到頁面的內(nèi)容,這樣殘疾人士不僅可以瀏覽網(wǎng)頁甚至與頁面進(jìn)行交互。
HTML select 元素會(huì)被自動(dòng)增強(qiáng)為原生的選擇列表組件,若需要自定義樣式菜單,可以在 select 上添加 data-native-menu="false" 屬性。
若需要禁止選擇某一個(gè)選項(xiàng),可以在選項(xiàng)的 option 標(biāo)簽上添加 disabled="disabled"。
下面給出一個(gè)自定義菜單的例子:
<div data-role="fieldcontain"> <label for="select-choice-1" class="select">選擇列表</label> <select data-native-menu="false" name="select-choice-1" id="select-choice-1"> <option value="12h">12小時(shí)</option> <option value="1d">一天</option> <option value="2d">兩天</option> <option value="week">一周</option> </select> </div>
選擇按鈕
自定義菜單
若需要多項(xiàng)選擇,則可以在 select 標(biāo)簽上添加 multiple="multiple" ,但原生的選擇菜單不支持該功能。對(duì)于多項(xiàng)選擇菜單,還有幾點(diǎn)要注意的:
(1)jQuery Mobile 會(huì)在菜單里創(chuàng)建一個(gè) jQuery Mobile header ,并在 header 的左邊添加一個(gè)關(guān)閉菜單按鈕。
(2)當(dāng)用戶選擇兩個(gè)或以上選項(xiàng)時(shí)選擇按鈕右側(cè)會(huì)出現(xiàn)一個(gè)小圖標(biāo),圖標(biāo)內(nèi)顯示已選擇選項(xiàng)的個(gè)數(shù)。
(3)所有選擇的選項(xiàng)文本會(huì)顯示在選擇按鈕上,如果文字超出按鈕長(zhǎng)度,會(huì)以省略號(hào)代替多余的內(nèi)容。
(4)如果選項(xiàng)過多,菜單會(huì)以新頁面的形式顯示。
多項(xiàng)選擇列表實(shí)例
<div data-role="fieldcontain"> <label for="select-choice-2" class="select">多項(xiàng)選擇列表</label> <select data-native-menu="false" multiple="multiple" name="select-choice-2" id="select-choice-2"> <option value="12h">12小時(shí)</option> <option value="1d">一天</option> <option value="2d">兩天</option> <option value="week">一周</option> </select> </div>
另外我們還可以對(duì)選項(xiàng)進(jìn)行分組,使用以下標(biāo)簽標(biāo)簽把同一組的選項(xiàng)包裹起來,其中 label 的值為該分組的標(biāo)題。
<optgroup label="Group1"></optgroup>
分組選擇列表實(shí)例
<div data-role="fieldcontain"> <label for="select-choice-3" class="select">分組選擇列表</label> <select data-native-menu="false" name="select-choice-3" id="select-choice-3"> <optgroup label="Group1"> <option value="12h">12小時(shí)</option> <option value="1d">一天</option> <option value="2d">兩天</option> <option value="week">一周</option> </optgroup> <optgroup label="Group2"> <option value="1m">一個(gè)月</option> <option value="1q">一季度</option> <option value="1y">一年</option> </optgroup> </select> </div>
7.滑桿
在 jQuery Mobile 中,type="range" ( HTML5 屬性值 ) 的 input 元素會(huì)被增強(qiáng)為劃桿組件,該組件可以通過一些屬性值配置,value 設(shè)置滑桿的初始值, min 和 max 分別設(shè)置滑桿的下限和上限。另外滑桿組件還支持鍵盤響應(yīng),鍵盤的右箭頭,上箭頭,Page Up 鍵都可以增加滑桿的當(dāng)前值,相應(yīng)的,左鍵頭,下箭頭, Page Down 鍵可以減少滑桿的當(dāng)前值,使用 Home 鍵和 End 鍵則可以設(shè)置當(dāng)前值為最小值(下限)和最大值(上限)。
<div data-role="fieldcontain"> <label for="slider">滑桿</label> <input type="range" name="slider" id="slider" value="0" min="0" max="100" /> </div>
8.開關(guān)
具有兩個(gè) option 的 select 元素添加 data-role="slider" 屬性后會(huì)被增強(qiáng)為 jQuery Mobile 的開關(guān)組件,用于表示布爾型數(shù)據(jù)( ture or false ),拖動(dòng)滑動(dòng)條可以在“開”與“關(guān)”之間選擇,其中第一個(gè) option 會(huì)被渲染成“開”的樣式。
<div data-role="fieldcontain"> <label for="slider">開關(guān)</label> <select name="slider" id="slider" data-role="slider"> <option value="off">關(guān)閉</option> <option value="on">開啟</option> </select> </div>
三.提交表單
jQuery Mobile 自動(dòng)采用 Ajax 的方式提交表單,默認(rèn)的 method 為 get ,action 為當(dāng)前頁面的相對(duì)路徑,在表單頁面和結(jié)果頁面之間會(huì)有平滑的轉(zhuǎn)場(chǎng)過渡,并且可以在表單上使用 data-transition 指定轉(zhuǎn)場(chǎng)效果。如果不想使用 Ajax 的方式提交表單,可以在全局事件禁用 Ajax (如何全局禁止 Ajax 并不在本文討論范圍,但會(huì)在本系列的后續(xù)文章中作詳細(xì)說明)或是在 form 上添加 data-ajax="false" 屬性,下面是 data-transition 的所有可取值。
slide 滑動(dòng)(默認(rèn)值,從左至右滑出), slideup(從下至上滑出), slidedown(從上至下滑出), pop(從中心漸顯展開), fade(漸顯), flip(翻轉(zhuǎn))。
四.主題樣式
關(guān)于主題樣式,在上一文中已經(jīng)介紹過了,這里引用一下:
“data-theme=“” 屬性, 所有的 jQuery Mobile 組件均支持該屬性,用于設(shè)置組件的顏色, 該屬性默認(rèn)有五個(gè)值 a, b, c, d, e,分別代表由深到淺五種顏色,另外開發(fā)者還可以通過在 CSS 里添加相應(yīng)的 Class 來自定義顏色?!?/p>
五.刷新表單組件
由于 jQuery Mobile 對(duì)原生的 HTML 表單元素進(jìn)行了渲染和追加元素,所以開發(fā)者想通過 js 直接控制表單組件會(huì)比較麻煩(如使用了 Web SQL Database 儲(chǔ)存了數(shù)據(jù)在本地,在打開網(wǎng)頁時(shí)希望通過 js 獲取數(shù)據(jù)并給表單組件賦值的情況),因此 jQuery Mobile 設(shè)計(jì)了用 js 給表單組件賦值的 API ,下面逐一舉例介紹:
1.單選按鈕
選擇第一個(gè)選項(xiàng)
$("input[type='radio']:first").attr("checked",true).checkboxradio("refresh");
2.復(fù)選按鈕
選擇第一個(gè)選項(xiàng)
$("input[type='checkbox']:first").attr("checked",true).checkboxradio("refresh");
3.選擇列表
選擇第一個(gè)選項(xiàng),注意選項(xiàng)的索引是從1開始
var myselect = $('select#select-choice-1'); myselect[0].selectedIndex = 1; myselect.selectmenu('refresh');
4.滑桿
設(shè)置值為40
$("input[type=range]").val(40).slider("refresh");
5.開關(guān)
選擇第一個(gè)選項(xiàng)
var myswitch = $('select#shakeToClear'); myswitch[0].selectedIndex = 1; myswitch.slider('refresh');
注: refresh 方法不能直接使用在 Ajax 獲取的內(nèi)容上,例如 js 要操縱的表單組件在另一個(gè) Page, js 只在首頁加載時(shí)載入,這樣 jQuery Mobile 會(huì)出錯(cuò)(不會(huì)有直接報(bào)錯(cuò),只是該段 js 會(huì)失效),我們可以使用 live('pagebeforeshow', function(){}) 方法使到該段 js 在過場(chǎng)到表單組件所在頁面時(shí)才載入( pagebeforeshow 是 jQuery Mobile 事件之一,此外還有 pagebeforehide, pageshow, pagehide 三種方法)。下面給出一個(gè)例子:
$('#setting').live('pagebeforeshow', function(){ // 在頁面顯示時(shí)選擇菜單中第一個(gè)選項(xiàng) var myselect = $('select#select-choice-1'); myselect[0].selectedIndex = 1; myselect.selectmenu('refresh'); });
相關(guān)文章
Jquery 模板數(shù)據(jù)綁定插件的使用方法詳解
本篇文章是對(duì)在Jquery中模板數(shù)據(jù)綁定插件的使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07簡(jiǎn)單常用的幻燈片播放實(shí)現(xiàn)代碼
幻燈片自動(dòng)播放圖片是當(dāng)前網(wǎng)站比較流行的一個(gè)展示方式,這里項(xiàng)目需要,我自己做了一個(gè)簡(jiǎn)單的,就不詳細(xì)講解了,代碼很簡(jiǎn)單。直接看效果圖和代碼吧,希望對(duì)大家有所幫助2013-09-09基于jquery實(shí)現(xiàn)智能表單驗(yàn)證操作
這篇文章主要為大家詳細(xì)介紹了基于jquery實(shí)現(xiàn)智能表單驗(yàn)證操作的相關(guān)資料,利用jquery實(shí)現(xiàn)了對(duì)一個(gè)表單字段格式的即時(shí)檢查,感興趣的小伙伴們可以參考一下2016-05-05jQuery窗口拖動(dòng)功能的實(shí)現(xiàn)代碼
本文通過jquery代碼實(shí)現(xiàn)窗口拖動(dòng)功能以及jQuery 鼠標(biāo)拖拽移動(dòng)窗口的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-02-02jQuery多級(jí)手風(fēng)琴菜單實(shí)例講解
這篇文章主要介紹了jQuery實(shí)現(xiàn)多級(jí)手風(fēng)琴菜單,菜單效果更有特色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-10-10jQuery實(shí)現(xiàn)的超酷蘋果風(fēng)格圖標(biāo)滑出菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的超酷蘋果風(fēng)格圖標(biāo)滑出菜單效果代碼,涉及jQuery基于鼠標(biāo)hover事件動(dòng)態(tài)操作頁面元素屬性的相關(guān)技巧,非常美觀實(shí)用,需要的朋友可以參考下2015-09-09JQuery 構(gòu)建客戶/服務(wù)分離的鏈接模型中Table分頁代碼效率初探
JQuery構(gòu)建客戶/服務(wù)分離的鏈接模型中Table分頁代碼效率初探!2010-01-01使用jquery datatable和bootsrap創(chuàng)建表格實(shí)例代碼
這篇文章主要介紹了使用jquery-datatable和bootsrap創(chuàng)建表格的實(shí)例代碼,需要的朋友可以參考下2017-03-03