【问题标题】:can't access elements after jQuerymobile page changejQuerymobile 页面更改后无法访问元素
【发布时间】:2014-06-15 23:32:47
【问题描述】:

我在这里创建了一个简单的例子来说明我的问题:https://github.com/kanesee/jqm-page-state

基本上,我有 page1.html,它有一个 id=content 的 div,我将其颜色更改为红色。 我有一个 page2.html,它有一个 id=content 的 div,我将其颜色更改为绿色。

当我转到 page1 时,div 中的文本颜色如预期的那样是红色的。 当我转到page2时,div中文本的颜色是绿色的,正如预期的那样。

我有一个从 page1 到 page2 的简单锚点 href。点击它后,page2 加载并且 div 内的文本相应更改。但是文本的颜色没有改变。是黑色的。

有人告诉我,当 ajax 处理页面导航时,页面状态会保留在原始页面上下文中。所以当我转到 page2 时,我实际上仍在 page1 上,但 page2 中的部分内容已加载到 DOM 中。

我需要做些什么来解决这个问题?

有合适的解决方案吗?或者甚至是一个简单的页面,它只是加载全新的 page2,就好像我手动将它输入到我的地址栏中一样?

【问题讨论】:

  • 顺便说一句,关于你的最后一句话“加载 page2 全新”,在这种情况下,你需要通过添加 data-ajax=falserel=external 来禁用 Ajax。
  • 我可以以编程方式执行此操作吗?
  • location.href = "page2.html"
  • 感谢@Omar!我总是可以指望你:)

标签: javascript jquery jquery-mobile navigateurl


【解决方案1】:

您对两个页面使用相同的id,并且两个页面都在同一个 DOM 中,因为启用了 Ajax。您必须指定要定位的元素以及在哪个页面中。

$("#content") 将返回 DOM 中的第一个元素,因此,您需要使用 页面事件 来定位当前页面或您将要导航到的页面中的该元素。这可以通过使用几乎所有的页面事件来实现。

$(document).on("pagecontainershow", function () {
   var activePage = $.mobile.pageContainer.pagecontainer("getActivePage");
   if (activePage.attr("data-url") == "page2.html") {
      // target content within active page
      // Or activePage.find("#content").css...
      $("#content", activePage).css({ color : "green" });
   }
});

以上是一个基本的例子;还有更高级的解决方案。

【讨论】:

  • 这是有道理的,这是我根据您在我的其他帖子中所说的最初理论。所以我可以确保我的 id 在所有页面中都是唯一的,或者在我的所有代码中引用这个 activePage。谢谢!
  • @kane 不客气。始终建议使用唯一的id,但是,如果您使用类,则需要根据包含它们的页面来引用它们。
  • 快速更新:activePage.attr('data-url') 为您加载的初始页面返回“indexpage”。这可能是有问题的,因为如果您先加载 page1 然后再四处导航,那么 page1 将被称为“indexpage”。但是如果你先访问page2,那么它被称为“indexpage”。所以除非你有一个特定的用户登陆页面,否则我认为这个解决方案会有一些复杂性
  • @kane 你可以通过为每个页面添加一个唯一的id 来克服这个问题,或者使用$.mobile.path.get(URL) 来确定当前基于 URL 浏览的页面。
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多