1. 程式人生 > >jQuery mobile從入門到放棄

jQuery mobile從入門到放棄

之前只知道jquery有個專門做移動端的外掛,今天做移動端專案的時候瞭解了下它的事件,簡單實用,觸控滑動基本都有,因為之前小組預設都是jQuery來寫程式碼來著,所以從官網下載出來準備直接開動,但一直到從中午到晚上,他讓我感覺到越來越絕望,現在,我想把我遇到的問題寫出來,大家可以參考一下

問題1:我在兩個官網分別下載最新的外掛,jquery.mobile-1.4.5.min.js與jquery.mobile-1.4.5.min.css,(這兩個壓縮版一共將近400kb),jquery.min.js,然後興沖沖的寫了個簡單的tap事件實驗了下,結果出現這個問題
原因及解決:這是因為他們的jquery的最新版本已經到3.3.1了,而query.mobile還在1.4.5,所以出現這樣的核心程式碼不匹配的問題(對了這也是因為他依賴jquery的原因,就是不知道既然依賴為什麼不對移動端持續更新呢),然後有查到它可以用之前的老版本,jquery-1.11.1就可以,也可以用人家的一個js的遷移外掛,給你的jquery降低版本(也真是會玩)

問題2:它老是警告我在css裡的指定路徑放一個loading圖片這裡
解決:這個應該也是預設樣式的問題,用問題3的方法2也可以解決。

問題3:之後發現,一執行又發現問題,我的a標籤的顏色變了,以及input框的高度都發生了改變,查了下怎麼清除預設樣式,有3種方法:
1.給那個標籤新增行內屬性:data-role=’none’ (表示不適用jquery mobile的樣式)或者在jquery.js匯入後,在jquerymobile匯入前使用下面的指令碼

$("input").attr('data-role','none');  
$("select").attr('data-role'
,'none');

,但這個方法只解決了我的input的問題,a標籤樣式的問題仍舊沒有 解決
2.使用jquery在建立後對所有元素增加屬性

$(document).bind( 'pagecreate', function( e ) {
    $( 'input, textarea, select', e.target ).attr( 'data-' + $.mobile.ns + 'role', 'none' );
});

感覺原理還是和1一樣(也可以決絕input的問題);
3.將 data-theme的取值改為大於e的值(好像是因為a~e已經有人家設好的主題了)
4. 找到JQuery Mobile預設樣式的類選擇器或是ID選擇器,在JQuery Mobile 的css檔案找到刪除或者不刪除,在你的樣式裡重寫 但是後面加上 !important 作用是提高指定CSS樣式規則的應用優先權。
因為用的是壓縮檔案,我就直接寫了覆蓋樣式了在css裡面了,刷新發現ok了,然後一跳轉有返回原地了,崩潰。
以上4中方法都沒解決我a樣式的問題(這個是一直沒弄好導致我放棄的直接原因)

問題4:樣式的問題我當時先發了下,因為我又發現了a的不同頁面無法跳轉的問題
解決方法:在jquery mobile中,預設a標籤是採用了ajax請求的,這就導致非ajax請求的a標籤會出現各種各樣的問題。在a標籤上加上data-ajax=”false”就是告訴jquery mobile:這個a不是ajax請求的。(已解決)

大概就是這些了,但總給我一種還有很多問題會出現的感覺,所以如果要用這個外掛,最好提前看看人家的樣式,按照那個來做你的佈局應該會好很多,想我之中,只想用人家的事件,天真的想忽略人家預設樣式的還是慎重吧,嗯,就這樣了,我去再看看原生或者zepto.