2011-09-30 62 views
4

下面是这种情况:jQuery Mobile的加载页面到DOM,即使我不要求它

(仅供参考,在下面,当我说“了window.location = ......”就被触发通过按钮点击)

我有三个页面:1.html,2.html,3.html。我浏览方式如下:

1.HTML --- window.location="2.html" ---> 2.HTML

2.HTML --- <a href="3.html" /> ---> 3.html

 click Back button 

2。 html --- window.location="1.html" - > 1.html

在最后一步1.html加载但是然后2.html的内容加载到DOM内部替换1.html的内容,所以我在1.html但是见2.html的内容。

发生了什么事?为什么jQuery mobile认为它必须加载2.html的内容?

我很确定它与历史记录和后退按钮有关。如果我只是在不使用“后退”按钮的情况下在1.html和2.html之间导航,它就可以工作。

更新这里是代码http://jsfiddle.net/x6bxN/要重现您想要从HTML框中获取代码并将其分为三个单独的文件。

+0

也许我不明白你在做什么。因为我无法复制它。我试图重现你所描述的内容,但它对我来说工作正常。这是我的示例代码。注:这是3个独立的HTML文件,我只是将它们全部粘贴到相同的pastebin页面中。 http://pastebin.com/JkneaERE –

+0

你可以发布多一点的代码?也许http://jsfiddle.net因为我想看看你是如何 –

+0

@PhillPafford这里的网页间导航是的jsfiddle http://jsfiddle.net/x6bxN/我把HTML从所有三个文件,并插入一个链接他们进入HTML框。你想把它们放在三个单独的文件中进行重现。 –

回答

0

如果你想jQuery Mobile的处理则需要使用$ .mobile.changePage改变页面(而不是了window.location = ..)的历史和返回按钮。

此处了解详情:http://jquerymobile.com/demos/1.0rc1/docs/api/methods.html

+0

我知道关于切换页面的jQuery手机功能。我不想使用它们,因为它打破了其他功能。因此我使用window.location。我的困惑,为什么jQuery手机试图'劫持'我的网页。这显然与历史和后退按钮有关。 –

0

您是否尝试过明确设置数据的Ajax =“假”您的链接?或rel =“external”,尽管这应该只在您想要更改为其他域时使用。

如果你没有设置任何一个,我很害怕JQM劫持。

试试看它是否适用于data-ajax =“false”。

其实我对常规的JQM-Ajax链接也有类似的问题。我想通过页面Ajax加载,但如果我这样做:

  • 去第1页
  • 去page2a
  • 去page2b =重载第1页...

很烦人我已经在Github上提交了一个问题,但由于您不想使用Ajax,因此您应该可以。

让我知道它是否有效。

3

看起来正在发生的事情是您在jQM范围之外进行导航,但是1.html位于location.hash中。独立地发生的点击的

哈希的变化,如当 点击返回按钮的用户,通过hashchange事件, 这势必会使用本Alman的hashchange 特殊事件插件(窗口对象处理包含在jQuery Mobile中)。当散列改变 时(以及当第一页面加载),该hashchange事件 处理程序将在的location.hash发送到$ .mobile.changePage()函数 ,这反过来又或者负载或揭示了引用的页面。

我假设location.hash在加载时有最初的1.html,但在使用window.location导航到新页面时没有跟踪新页面。由于您正在使用浏览器后退按钮,因此jQM使用最后一个跟踪的位置,在您的情况下为1.html。

我会建议使用JQM的$.mobile.changePage(),如果你需要跟踪的位置。 更多关于JQM导航可以在文档中找到:

+0

由于网址在任何链接中都没有#符号,因此location.hash始终为空。 –

+0

只要您离开1.html,jQM就会将此位置添加到urlHistory中。我怀疑,因为您没有使用jQM来跟踪哈希导航点击后退按钮会在urlHistory中找到1.html。你过渡到页面之前,你也许可以把你的自定义导航到的location.hash,这可能帮助这个问题 –

+0

我真的要使用$ .mobile.changePage()方法来尝试,但我需要挂钩事件正确。我知道我应该使用pageinit而不是ready事件,但是,我有点困惑,因为在如何挂钩这个事件。我对这里http://stackoverflow.com/questions/7729729/jquery-mobile-binding-to-pageinit-event –

0

胡乱猜测。您没有将css class ui-page-active硬编码到.ui-page元素中?因为会导致这两个页面出现。

+0

nope。但很好的猜测。 –

相关问题