0

离开页面时我需要做一些事情(页面'#first')。这真的很简单:

$(document).on('pagebeforehide', '#first', function(event, ui) {alert('leaving page');});

当我通过“内部”链接离开页面时没有问题,如下所示:

<a href="#second" data-role="button">Open something</a>

这里触发了事件并执行了处理程序。

但是当我想打开这样的外部链接时:

<a href="http://www.google.com" rel="external" data-role="button">Open something</a>

这里事件未触发且处理程序未执行。

页面内容是简单还是复杂都没关系 - 我发现这仅取决于链接内部还是外部的事实。

怎么了?

4

1 回答 1

2

rel="external" 表示页面将作为外部页面打开,并且所有以前的页面内容(包括其脚本)都将丢失,这也会触发整个页面刷新,因此您的pagebeforehide事件不会触发,因为它不会不再存在。

jQuery Mobile 页面事件只能在正常页面更改期间发生。基本上我想说的是,您需要转到另一个 jQuery Mobile 页面才能触发此事件。在您的情况下,您正在强制应用程序进行整页刷新,此时,页面刷新将在pagebeforehide事件之前发生。

编辑 :

虽然对此没有任何跨浏览器解决方案,但您总是可以作弊。

  1. 不要在您的按钮中添加 href 链接,而是将您的链接http://www.google.com替换为 # 并将其添加一个 id 以便我们可以识别它,如下所示:

    打开东西

现在向此按钮添加一个点击事件,并在将页面更改为 www.google.com 之前执行需要完成的操作:

    $(document).on('click', '#change-page', function(){       
        // Do something here then change page
    });
  1. 或者将您的按钮链接到另一个虚拟内页(仅将此内页用于此目的),在其上捕获 pagebeforehide:

    $(document).on('pagebeforehide ', function(){       
        // Again do something here and manualy change the page
    });
    
于 2013-05-01T09:00:30.043 回答