【问题标题】:Opening popups in jQuery Mobile 1.4.3 after a page transition页面转换后在 jQuery Mobile 1.4.3 中打开弹出窗口
【发布时间】:2014-07-10 15:48:31
【问题描述】:

我知道这会被一次又一次地问到,我已经用其他答案部分解决了这个问题。不过我现在卡住了。

我正在使用弹出窗口来浏览应用程序。事件顺序为: 1. 按“下一步”按钮。 2.关闭弹窗 3.换页 4.打开新的弹窗

您不能链接弹出窗口,所以我使用 afterclose。它适用于第一次转换,但之后我没有弹出窗口。此代码中的 console.log 给出了输出。

$('#introPanel1Next').click(function(){
  $('#introPanel1').popup({
    afterclose: function(){
      $(":mobile-pagecontainer").pagecontainer("change", "#page2", {
        transition: "slide"
      }).on( "pagecontainershow", function() {
        $('#introPanel2').popup('open');
      });
    }
  }).popup('close');
});

$('#introPanel2Next').click(function(){
  $('#introPanel2').popup({
    afterclose: function(){
      $(":mobile-pagecontainer").pagecontainer("change", "#page3", {
        transition: "slide"
    }).on( "pagecontainershow", function() {
        $('#introPanel3').popup('open');
      });
    }
  }).popup('close');
});

所以我可以从 page1 转到 page2 并弹出一个窗口,但即使我可以转到 page3 introPanel3 也不会弹出。

我认为这可能是我正在监听的事件(例如 pagecontainershow),但我已经全部尝试过了。其中一些不会在 page2 上弹出窗口,因为页面需要在调用 popup("open") 之前完成加载。

我不明白为什么它适用于第一个转换和弹出窗口,但不适用于下一个(因此后续的,总共 5 个)。


关于下面的答案,我试过这个:

$('#introPanel1Next').click(function(){
  $('#introPanel1').popup({
    afterclose: function(){
      $(":mobile-pagecontainer").pagecontainer("change", "#page2", {
        transition: "slide"
      }).on( "pagecontainershow", function() {
        $('#introPanel2', ui.toPage).popup("open");          
      });
    }
  }).popup('close');
});

它不起作用。 :(

【问题讨论】:

  • 您应该只在点击处理程序之外定义一次 pagecontainershow 事件,然后检查 ui.toPage/ui.prevPage 以决定显示哪个弹出窗口。它也将有助于查看您的 HTML。与页面等相关的弹出面板在哪里?也许是小提琴?
  • 因为每当pagecontainershow 触发时,它都会打开$('#introPanel2').popup('open');
  • function (e, ui) 你忘了e, ui
  • 我已经添加了。还是一样。

标签: javascript jquery jquery-mobile popup


【解决方案1】:

pagecontainershow 第一次触发时,它将打开#introPanel2。之后,您关闭该 popup 并绑定另一个 pagecontainershow 以打开另一个 popup #introPanel3

移动到第 3 页时,pagecontainershow 将触发,但它会尝试打开 #introPanel2,然后打开 #introPanel3。结果,没有一个是打开的。

您需要检查哪个页面处于活动状态以确定要打开哪个弹出窗口。例如

$(document).on("pagecontainershow", function (e, ui) {
   var activePage = ui.toPage; /* as of jQM 1.4.3 */
   var activePage = $.mobile.pageContainer.pagecontainer("getActivePage"); /* 1.4.2 and before */

   if (activePage[0].id == "page1") {
      $("#popup1").popup("open")
   }
});

或者,只需在活动页面中找到 popup 并打开它。

$(document).on("pagecontainershow", function (e, ui) {
   $(".ui-popup", ui.toPage).popup("open");
});

Demo

【讨论】:

  • 你能用我的代码告诉我如何使用你的第二个解决方案吗?例如,我是否使用#introPanel2 代替.ui-popup?因为我试过了,但没有用。
  • 如果你想指定一个弹出窗口,你需要检查页面ID。第二种解决方案更容易,因为它会打开一个带有活动页面的弹出窗口。如果您有许多弹出窗口,您可以针对具有特定类的特定弹出窗口,例如$(".ui-popup.foo", ui.toPage).popup("open"); 这将在活动页面中打开一个带有类foo 的弹出窗口,无论当前显示哪个页面@SubjectiveEffect
  • 我可以使用弹出式 ID 执行此操作吗?它们都有唯一的 ID,但没有唯一的类。
  • @SubjectiveEffect 可以,例如$("#popup1, #popup2, #popup3", ui.toPage).popup("open"); jsfiddle.net/Palestinian/k3mZF
  • 附言。你的小提琴对我没有任何帮助。我正在使用 Chrome。结果只是顶部带有“第 1 页”的灰色条。什么都没有发生,点击任何地方什么都没有,没有弹出窗口。
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多