jQuery Mobile

1. pageinit & pageshow

JQM的官方手册重点提醒了使用$(document).bind(‘pageinit’)代替$(document).ready()

但当你需要对某一个页面(page)编写其独享的Javascript脚本时, 选择器应该选择的是该page层, 而不是document, 并使用live()添加事件处理器。这在ajaxEnable=true的情况下尤为重要。

View Demo

JS :

$(document).bind(‘pageinit‘, function () { console.log(‘任意一个页面初始化时响应‘); }); $(document).bind(‘pageshow‘, function () { console.log(‘任意页面被显示时响应‘) }); $("#hello").live(‘pageinit‘, function () { console.log(‘只响应id为hello的页面初始化‘); }); $("#hello").live(‘pageshow‘, function () { console.log(‘只响应id为hello的页面被显示‘); }); 

Html :

id=‘hello‘ data-role=‘page‘>

data-role="content"> href="#world" data-role="button">Next

id=‘world‘ data-role=‘page‘>

data-role="content"> href="#hello" data-role="button">Previous

2. refresh

通过脚本修改JQM页面数据时, 通常需要再进行一次refresh。可以根据不同的类型选择以下对应的方法。

$(‘div#id‘).trigger(‘refresh‘); $(‘ul#id‘).listview(‘refresh‘); $(‘button#id‘).button(‘refresh‘); $(‘input#id[type=checkbox]‘).checkboxradio(‘refresh‘); 

3. tap

JQueryMobile在Android设备上的tap事件会出现多次触发的问题, 对此可以参考Ghost Click

我们的解决方案是使用Google FastButton,

将原来需要用tap的地方改用fastbutton处理。

4. taphold

检查jquery.mobile-1.2.0.js, 1722行。

timer = setTimeout( function() { triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); }, $.event.special.tap.tapholdThreshold );  

在触发taphold事件时没有清除handlers, 所以当taphold事件后, 本不应该被触发的tap事件也被触发了。

暂时修复的方案是在1722行添加:

timer = setTimeout( function() { clearTapHandlers(); // <---- + 这一行 triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); }, $.event.special.tap.tapholdThreshold );  

这个bug存在于JQM1.2.0及以下版本。

5. swipe

JQM的swipe响应也是非常慢/诡异, 如果需要使用swipe事件, 建议寻找其他代替的方案, 如TouchSwipe

6. popup

你可以选择在脚本中生成popup, 并通过popup(‘open‘)popup(‘close‘)进行打开/关闭, 借此可以实现很多实用的功能。

如以下模拟confirm的效果:

var confirm = function (content, title, response) { var html = " 

" + title + "

" + content + "取消确定

", previous = $(".ui-popup-active div[data-role=popup]"), divConfirm = $("div#mToast_confirm"); previous.popup(‘close‘); if (divConfirm.length > 0) { divConfirm.remove(); } divConfirm = $(html).appendTo("div[data-role=page]:first"); divConfirm.trigger(‘create‘) // <-- 生成popup .trigger(‘refresh‘) .popup() .find("#mToast_confirm_response").on(‘fastClick‘, function () { divConfirm.popup(‘close‘); previous.popup(‘open‘); response(); }); divConfirm.popup(‘open‘); // --> }; confirm(‘are you sure?‘, ‘Confirm‘, function () { alert(‘sure‘); });

需要注意的是popup(‘open‘)前需要对div进行.trigger(‘create‘).trigger(‘refresh‘).popup()

此外, $.mobile.popup.active也非常实用, $.mobile.popup.active.element[0]将返回当前显示的popup层对象。

7. data-rel=back

当你发现使用data-rel=back的返回按钮响应速度难以忍受的时候, 可以为这个按钮单独绑定一个事件处理器。

如以下脚本将加快header上的返回按钮响应速度:

$(document).bind(‘pageinit‘, function(){ $("div[data-role=page] > div[data-role=header] > a[data-rel=back]").bind( "fastClick", function( event ) { $.mobile.back(); return false; }); }); 

8. BackButton (PhoneGap + JQM)

在PhoneGap+JQM的方案下, 发现Android手机上的返回硬键无效或者对popup的处理不正确时(多为ajaxEnable=false的情况), 加入以下脚本:

document.addEventListener("deviceready", backKeyListener, false); function backKeyListener() { document.addEventListener("backbutton", onBackKeyDown, false); function onBackKeyDown() { try { if ($.mobile.popup.active) { var popupDiv = $.mobile.popup.active.element; popupDiv.each(function () { if ($(this).parent().hasClass(‘ui-popup-active‘)) { $(this).popup(‘close‘); return false; } }); } else { $.mobile.back(); return false; } } catch (e) { console.log(‘BackButton Listener Catch : ‘ + e); } } }  

9. $.mobile.loading

建议把$.mobile.showPageLoadingMsg()以及$.mobile.hidePageLoadingMsg()的脚本改为$.mobile.loading(‘show‘)以及$.mobile.loading(‘hide‘)

这个方法同样可以配置内容、样式等参数: $.mobile.loading(‘show‘, {text : ‘test‘, theme : ‘a‘});

10. $.mobile.back()

如果你是使用PhoneGap + JQueryMobile进行开发, 设定了ajaxEnable=false, 并且发现$.mobile.back()无效, 那么请尝试设定phonegapNavigationEnable=true

当该值为true时, $mobile.back()会使用nav.app.backHistory();, 否则使用window.history.back();

但这个参数也 建议在ajaxEnable=false的情况下进行设置。

11. ajaxEnable

如果希望使用PhoneGap将应用打包为app, 我的建议是, 尽量使用ajaxEnable=true, 否则体验十分不好, 而且你还会遇到更多的问题。

12. 页面跳转

请使用$.mobile.changePage()代替window.location.href

如果要刷新当前页面呢? 我的方法是:

$.mobile.changePage($.mobile.activePage.jqmData(‘url‘), {reloadPage : true}); 

13. 慎重选择JQueryMobile

如你所见, 使用JQM + PhoneGap进行WebApp开发会遇到许多问题。

但JQM目前还是只适合做简单的WebApp, 如果坚持做复杂, 其效率将会十分堪忧。

当然, 如果你选择了一个正确的方式, 那其中大部分都可以避免。

此外, Github上有许多项目对基于JQM的开发会有很大的帮助。

1. The-M-Project

The-M-Project的UI基于JQM, 但其拥有更好的结构, 并实现了一些你可能会需要的功能。其文档也十分健全, 你可以查看其更详细的介绍。你不一定使用这个框架, 但在JQM的开发上, 这个项目有许多值得借鉴的地方。

2. persistencejs

离线数据的库, 这里有一个结合JQM的Demo

3. artTemplate

时间: 2024-11-11 04:11:00

jQuery Mobile的相关文章

jQuery Mobile中表单的使用体会

jQuery Mobile是手机端(移动端)页面制作用的框架,包括CSS和JavaScript,此处简单总结一下表单的书写,主要涉及CSS部分.框架提供了表单的一些样式,但在实际使用的时候,我们可能会用自己的自定义样式,这种情况下,框架提供的样式可能就不能满足我们的要求.今天项目中写登录页面的静态网页,碰到了几个问题,在这里和大家交流一下. 1 利用data-role="none" 在使用表单的时候,如果想使用自定义样式,就可以表单元素上给data-role属性赋值none,意思就是不

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

jquery mobile常用的data-role类型介绍

转自原文 jquery mobile常用的data-role类型介绍 data-role参数表: page        页面容器,其内部的mobile元素将会继承这个容器上所设置的属性 header     页面标题容器,这个容器内部可以包含文字.返回按钮.功能按钮等元素 footer       页面页脚容器,这个容器内部也可以包含文字.返回按钮.功能按钮等元素 content     页面内容容器,这是一个很宽容的容器,内部可以包含标准的html元素和jQueryMobile元素 cont

jQuery Mobile学习笔记

1.获取jQuery mobile 文件,访问jQuerymobile网站下载 (貌似使用jquery mobile后,jquery会自动在网页中添加一些class类,第一次知道的我是被吓呆的!!) 2.需要使用数据属性,数据属性是HTML5引入的,以data-开头 比如data-role可以用于定义页眉,页脚,内容,页面等 data-role="page" 是在浏览器中显示的页面. data-role="header" 是在页面顶部创建的工具条 (通常用于标题或者

jquery mobile 移动web(2)

button 按钮 data-role="button" 将超链接变成button. 具有icon 图标的button 组件. 提供了18常用的图标 data-icon ="" 1.arrow-1左箭头 2.arrow-r 右箭头 3.arrow-u 上箭头 4.arrow-d 下箭头 5.delete 删除 6.plus 加号 7.minus 减号 8.check 对号 9.gear 齿轮 10.refresh 刷新 11.forward 前进 12.back 返

jquery mobile 教程

简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的.可跨设备的Web应用程序.我们将后续的介绍中向大家介绍大量的代码及实例. jQuery一直以来都是非常流行的富客户端及Web应用程序开发中使用的JavaScript类库,然而一直以来它都是为桌面浏览器设计的,没有特别为移动应用程序设计. jQuery Mobile是一个新的项目用来添补在移动设备应用上的缺憾.它是基本jQuery框架并提供了一定范围的用户接口和特性,以便于开发人员在移动应用上使用.使用该框架可以节省大量的js代

jquery mobile的一些插件(图片滚动)

jquery mobile的一些插件(图片滚动) 1,photoswipe 网址:http://www.photoswipe.com/demo: http://www.photoswipe.com/latest/examples/04-jquery-mobile.html个人描述:在手机上操作很流畅,能自使用屏幕尺寸,竖屏显示效果很好,横屏图片太大了,也就是列数固定的原因. 2,Touch-Gallery 网址:http://neteye.github.com/touch-gallery.htm

jQuery Mobile 手动显示ajax加载器

在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更好一些. 先看两个方法,显示和关闭,方法来自于参考:http://blog.csdn.net/zht666/article/details/8563025 <script> //显示加载器 function showLoader() { //显示加载器.for jQuery Mobile 1.2.

jQuery Mobile 手机网页开发的 两个问题

============问题描述============ 问题1: 怎么动态修改主题....我想做个夜间模式...用户点击按钮的时候,改变jQuery Mobile里page的主题....怎么用jQuery 修改.. 问题2:$.Mobile 这个对象有多少方法什么的啊,哪里有参考的,我去搜了,都是一些不全的,没有像开发文档之类的吗.. 我搜到的都是 http://www.w3school.com.cn/jquerymobile/jquerymobile_examples.asp http://

经典收藏 50个jQuery Mobile开发技巧集萃

1.Backbone移动实例 这是在Safari中运行的一款Backbone移动应用程序.想开始体验移动开发,一个好的出发点就是关注这个应用程序的构建方式.先不妨在你的浏览器中查看该应用程序. 相关链接:http://bennolan.com/2010/11/24/backbone-jquery-demo.html 2.使用媒体查询来锁定设备 你可能会问如何使用CSS来锁定设备(根据屏幕尺寸).比如说,你想要为iPad设计两列布局.为智能手机设计单列布局.要做到这一点,最佳办法就是使用媒体查询.