2013-05-01 48 views
0

我需要在离开页面(页面'#first')时执行某些操作。 这真的很简单:当我通过“内部”离开页面pagebeforehide事件仅针对“内部”页面转换触发

$(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> 

这里的事件和处理不执行。

无关紧要的是页面内容简单或复杂 - 我发现这只取决于链接内部还是外部的事实。

怎么了?

回答

2

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

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 
    }); 
    
+0

你能不能指点一些SAFE(意思是:独立于浏览器)陷入页面之间转换的方式? 这真的很重要,因为谷歌浏览器不支持DOM'onunload'事件,移动Safari(iOS设备)不支持'onbeforeunload'事件等 – 2013-05-01 09:20:13

+0

你运气不好,因为没有任何类似的crossbrowser实现。但是这不应该阻止你作弊。我会在我的答案中写出可能的解决方案。 – Gajotres 2013-05-01 09:37:03

+0

点击处理是处理页面转换的明显例子。 显而易见但并未涵盖所有可能的方式 - 使用浏览器后退/前进按钮和关闭页面进行转换。 它是最终的 - 常规意义上的陷阱页面转换(!)的跨浏览器实现不存在吗? – 2013-05-01 10:53:09