- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
jQuery Mobile v1.4,我们是 2014 年 2 月。
所以,我读过 here (gihub)我们应该对捕获的 pagecontainer
事件创建一个 if
语句来假设加载的页面是否是预期的页面。
这里有一个小场景,试图了解新 pageContainer 小部件的预期行为及其预期用途。
就这么简单,一个登录页面,以编程方式预取欢迎页面,然后在成功登录时切换到欢迎页面。欢迎页面有一些 JS 脚本来为页面添加动画,必须仅在页面可见时启动。 我们如何做到这一点?
以下是我通过控制台调查pagecontainer 事件时得到的结果。我的目标是找到一种方法来检测我的欢迎页面(实际上是任何页面)是否处于事件/可见状态。
为了便于理解,我使用这种格式作为查询:
$( 'body' ).on( 'pagecontainerbeforeload', function( event, ui ) {
console.log("beforeload");
console.log(event);
console.log(ui);
});
<小时/>
全新的开始, 当我第一次加载页面和 JQM 时(即 /Users/login
)
可用的事件:
现在,即使您禁用了过渡效果 ( See api ),这些也会始终启动
<小时/>好的,那么我想以编程方式加载一个页面(预取它),我这样做:(我想要 /Users/welcome
)
$("body").pagecontainer("load", "/Users/welcome");
我启动了这些事件(页面尚不可见):
好吧,现在我更改我的页面:(到/Users/welcome
)
$("body").pagecontainer("change", "/Users/welcome");
我触发了这些事件:
好吧,现在我非常确定我想要用来确保加载此页面的唯一 pagecontainer 事件是 pagecontainertransition
。这是我在每个需要启动 JS 的页面上实现的:
设置页面容器的 ID (PHP)
<div data-role="page" data-theme='a' id="<?php echo $this->id_url()?>">
...在页面末尾(JS)
$( 'body' ).on( 'pagecontainertransition', function( event, ui ) {
if(ui.toPage[0] == $('#'+id_url )[0] ) {
functionToLaunchWhenPageShowUp();
}
} );
现在,如您所见,我指的是 ui.toPage
第一个子 [0]
将其与 $('.selector' )
第一个子 [0]
。 这是正确的方式吗?我的意思是,新 API 的预期方式。感谢分享您的知识;)
最佳答案
我成功地做了一些有效的事情,相对简单,并且尽可能接近 DRY 原则(不要重复自己)。
按照它们“加载”的顺序:
文档 < head > 中的 JS 脚本
<script type="text/javascript" src="/js/jquery-2.1.0.min.js"></script>
<script type="text/javascript">
(function(){
//Global settings for JQM 1.4.0
$( document ).on( "mobileinit", function() {
//apply overrides here
$.mobile.defaultPageTransition = 'flip';
});
// The event listener in question !
$( document ).ready(function () { //..only launched once the body exist
// The event listener in question :
$( 'body' ).on( 'pagecontainertransition', function( event, ui ) {
//gets the id you programatically give to your page
id_url = $( "body" ).pagecontainer( "getActivePage" )[0].id;
//compare the actual event data (ui.toPage)
if( ui.toPage[0] == $('#'+id_url )[0] ) {
// failsafe
if ( typeof( window[ id_url ].initPage ) === "function" ) {
// call the dynamically created init function
window[ id_url ].initPage();
}
}
} );
});
document.loadPage = function( url ){
$( "body" ).pagecontainer( "load", url , options);
};
document.changePage = function( url ){
$( "body" ).pagecontainer( "change", url , options);
};
})();
</script>
<script type="text/javascript" src="/js/jquery.mobile-1.4.0.min.js"></script>
每个返回页面的开头
<div data-role="page" data-theme='a' id="<?php echo $this->id_url()?>">
<div data-role="content">
<script type="text/javascript">
// we create dynamically a function named after the id you gave to that page
// this will bind it to window
this[ '<?php echo $this->id_url() ?>' ].initPage = function(){
// put anything you want here, I prefer to use a call
// to another JS function elsewhere in the code. This way I don't touch the
// settings anymore
NameOfThisPage.launchEverythingThatNeedsTo();
};
</script>
...
这是此代码的说明。首先,我为所有这些全局查询找到了一个位置,JQM 已经迫使我将内容放在 jquery.js 和 jquery.mobile.js 之间,所以让我们使用它。
除了全局 JQM 设置之外,我还仅使用一个事件监听器绑定(bind)到正文/文档/(无论将来是什么)。它仅在主体存在后才会启动。
现在,乐趣开始了。我以编程方式为服务器返回的每个页面提供一个 id(即使用 _ 而不是 / 的脚本路由)。然后,您创建一个以该 id 命名的函数,它附加到窗口,(我想您可以将它放在其他地方..)。
然后回到事件监听器,在转换时,您将获得通过 pagecontainer( "getActivePage" )
设置的 id方法,使用该 id 抓取页面 jQuery 样式,然后将其与事件监听器返回的数据进行比较。
如果成功,请使用该 ID 启动您放入页面中的 init 函数。如果您没有在页面中放置初始化脚本,则有一个故障保护功能。
这里的奖励是那些 document.loadPage/changePage 。我将它们放在那里,以防更改页面的方法发生变化。修改一处即可应用于整个应用程序。这是干的^^
总而言之,如果您对改进此方法有任何意见,请请分享。 v1.4 方法非常缺乏示例(并且与 v1.3 示例有些困惑)。我已尽力分享我的发现(ps.我需要这些代表点:P)
关于jquery-mobile - JQM 1.4 - 在特定页面/选择器上使用 pagecontainer 事件的首选方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21546097/
我想做的是通过以下代码从一个页面移动到另一个页面: if (($("#UserIDTXT").val() == "3164") && ($("#UserPassTXT").val()) == "123
Html 1:首页 $(document).bind("mobileinit", function(){ $.mobile.defaultPageTrans
我知道这个问题已经被问过好几次了,但我想为所有页面加载一个动态面板,但它不起作用。有时 css 样式没有加载或面板没有打开..有什么建议么? ;(
jQuery Mobile 有各种事件和方法。 pagecontainer 事件和方法用于处理 v1.4 中的大部分 page 事件。我不明白 :mobile-pagecontainer 选择器的用法
我正在使用 Watir 编写示例测试,我在其中使用 IE 类在站点中导航、发出查询等。这非常有效。 我想继续使用 PageContainer我登陆的最后一页上的方法。例如,在该页面上使用它的 HTML
在 jQuery Mobile 中,我想从外部文件加载页面容器。我可以将标记添加到我的 DOM,但之后我面临的问题是,一旦我导航到 #page2,整个 #page1-div 从 DOM 中消失,因此我
我有一个要求,我需要从数据库动态获取设备详细信息并将这些设备列表添加到列表中,并为列表中的每个链接添加页面。我正在使用 JQM 1.4.2。 这是我的 html
$.mobile.pageContainer 是指包含其他虚拟页面的元素。它设置为 .所以我认为它可以改变。实际上,某些 JQM 方法 (changePage) 允许您为页面指定非默认页面容器。 J
我正在使用 https://gist.github.com/8cbe094bb7a783e37ad1为了一次显示一个 ViewPager 的多个页面。它适用于简单的 PageAdapter,但我需要显
jQuery Mobile v1.4,我们是 2014 年 2 月。 所以,我读过 here (gihub)我们应该对捕获的 pagecontainer 事件创建一个 if 语句来假设加载的页面是否是
在启用多页 ajax 的移动应用程序中的 pageContainer 更改事件后找不到使用 anchor 位置的方法后,我尝试调查是否可以在该事件后静默滚动到特定的 div 元素,但没有成功。 代码是
我是一名优秀的程序员,十分优秀!