我有一个搜索对话框,我正在弹出并填充jquery模板。在他们做出选择后,我在当前页面上设置了一个值。因此我不需要hashTag或类似的东西,我只需要一个弹出式对话框,我可以以编程方式打开和关闭。我目前正在用
打开对话框$.mobile.changePage(dialog, { transition: "slide", changeHash: false });
并用
关闭它dialog.dialog('close');
但是,在某些情况下(当页面导航到的时候),关闭对话框会刷新当前页面。
有没有更好的方式与此互动?
更新
我想我弄清楚发生了什么。因此,出于某种原因,jquery mobile通常会在DOM上加载2个页面 - 其中一个是不可见的,您可以通过在控制台中运行$('[data-role = page]')来验证这一点。一页是您所在的页面,另一页是您最初导航到的页面。不太清楚他们为什么选择这样做,但你有它。
因此,即使对话框已经在DOM中,它们也将对话框视为具有不同转换的页面导航。因此,如果直接转到页面然后触发对话框,修改当前页面并关闭它可以正常工作 - 因为原始页面始终加载在DOM中。但是,如果您转到另一个页面,而不是导航到触发对话框的页面,然后触发对话框,它会销毁当前页面,以便DOM中的页面是初始页面和对话框。在这种情况下,它会完全重新加载对话框启动页面,您永远不会有机会进行任何修改。
哎呀。我如何直接与jqm对话框小部件进行交互?
答案 0 :(得分:1)
你可以尝试另外两件事。两者都应该有效:
1集DomChache
如何重写JQM以保持页面在DOM中触发对话框?文档说您可以设置data-dom-chache
并覆盖从DOM清除页面。
如果只是在通过AJAX加载此页面时(而不是直接加载),您可以在拥有data-page-external
的触发页面上保持DOM依赖,仅在分配DOM-chache =“true”时对话框打开并在对话框关闭后再次将其删除。
2覆盖JQM
我遇到了你描述的同样的问题并让它像这样工作(虽然需要攻击JQM ......):
// inside transitionPages function
if ( !$(toPage).jqmData('internal-page')
{fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } );}
}
我的问题是,页面切换到某些页面(与对话框相同)导致前一页面(从中触发对话框)从DOM中删除,因此我有一个空白屏幕(当试图返回时)。我在页面中添加了data-internal-page =“true”,这应该保持前一页完整,并在JQM中添加了if子句。
所以现在pageHide(和DOMcleanup)只会触发,如果我没有去到标有data-internal-page="true"
的页面
干杯!
答案 1 :(得分:1)
我想我遇到了类似的问题。我想要做的是基于某些参数,在加载时弹出一个对话框窗口(在同一页面上显示该内容),他们可以关闭它并查看加载的页面。
我可以使用load或pageshow事件来加载弹出窗口,但是当我单击关闭时会将您发送回历史记录中的上一页,而不是仅关闭对话框。
//target your 1st page content, here its id=success
//the modal content is in a page id=dialog and data-role="dialog"
$('#success').live('pageshow',function(){
window.setTimeout(function(){
$.mobile.changePage('#dialog','pop',false,false);
},1);
}
它是一个hack,只是允许页面加载击败对话框,因此它被卡在历史记录中。然后,对话框的默认对话框关闭行为按预期方式工作。谈论一个PITA,如果他们为JQuery UI对话更多一点,它会让事情变得更容易。
答案 2 :(得分:0)
关于你的问题:你看过Jquery Mobile Actionsheet plugin
吗?如果你真的不需要加载页面,那应该没问题。
同样有用的可能是Cagintranet iPad popover,尽管您必须将设计调整为移动设备上的全屏设计。如果你需要CSS / Jquery这样做让我知道(我在JQM插件中使用它我正在写)
希望有所帮助。