2011-06-26 40 views
3

我开发了一个rails应用程序,其主要功能是一个商业搜索页面,其功能是显示一页商业结果和一个允许用户进一步搜索/过滤结果的表单。jQuery Mobile和锚链接请求错误的页面

最近我实现了一个手机界面使用jQuery Mobile的有以下设置这个应用程序:

业务结果页面是,它有两个div的以“页”的数据的作用。第一个是用户看到的结果的实际页面,第二个jQuery Mobile页面的HTML id为“search-form”,并包含过滤结果所需的表单域。

在第一页的标题栏中有一个按钮,该按钮通过对话框的数据相关链接到#search-form。

如果有人直接访问site.com/businesses然后点击链接,jquery Mobile会正确加载site.com/businesses#search-form到模态对话框中,并且蠕虫可以正常工作,但是如果他们开始浏览任何其他页面上的会话时,对话框始终包含其原始页面的内容。

例如,如果他们来到站点site.com/someotherpage,然后以某种方式导航到site.com/someotherpage#/businesses并单击过滤器按钮,jQuery Mobile错误地请求并填充对话框的内容site.com/someotherpage#search-form

我试着用#search-form改变过滤器的链接,用#search-form实际硬编码到当前页面的完全绝对路径,没有任何效果。

在此先感谢,我要为这个疯狂!这是阻止我部署移动版本的唯一因素。

+0

你能编辑你的问题并添加一些代码吗?也许页面的HTML? –

回答

0

我有同样的问题。放置在#thirdPage中的任何按钮都会被jQuery很好地展现出来,但是它们会从用户加载的第一个页面创建它们的弹出窗口。此外,对话框上的后退按钮将指向该第一页。

在静态页面中加载了一个按钮(如下所示),但同样适用于通过pagebeforecreate事件插入的动态创建的按钮。

我开始认为所有的弹出窗口应该放在用户到达的第一页的html文件中。但这并没有帮助,而且会比较尴尬。

顺便说一句,在桌面上的Chrome中测试它的工作正常。只有在我的Android上发生问题。但是,这很可能是出于前面提到的相同原因:在Chrome上,我将自行加载第3页,而在Android上,我将通过第1页和第2页到达。

另一个特点是,在桌面上的Chrome测试时,我连接到#thirdPage的pagebeforecreate()事件被称为再次,即使对话框是完全的#thirdPage元素之外,没有任何自定义事件附在我身上。第二次调用pagebeforecreate()不会在Android上发生。

还有一件有趣的事情:带有这些问题的HTML页面被jQueryMobile给出了一个< base>元素,其href属性不以html结尾。所有其他页面最后都会得到“.html”。奇怪的。

<html> 
    <body> 
     <div id="thirdPage" data-role="page" data-url="third"> 
     <a href="#desiredPopup" data-role="button" data-rel="dialog" data-transition="pop">Give me the popup</a> 
     </div> 
     <div id="desiredPopup" data-role="dialog" data-url="purchase" tabindex="0"> 
     <a href="#thirdPage" data-rel="back" data-role="button" data-inline="true" data-icon="back">Back to page "three"</a> 
     </div> 
    <body> 
    <html>