2012-06-28 85 views
2

我有以下代码替代品,这两个都不令人满意。我正在使用jQuery 1.7.2jquery卸载/绑定可靠的跨浏览器解决方案

第一个在Firefox中是完美的,但在IE9中发布了,但没有完成写入数据库的操作。我曾尝试将其ASYNC假冒为别人所建议的,但奇怪的是,这似乎没有任何区别。它在其他浏览器中也可能不起作用。

第二个完成,但弹出一个确认关闭页面对话框。我已经看到了有关如何制止这种情况的建议,但我无法取得同样的结果。

任何人都可以给我一个替代?或者给我正确的ASYNC错误代码,为第一个IE9的作品?或者告诉我如何正确防止确认关闭?

// Sends the post but does not complete the post in IE9 
jQuery(window).unload(function() { 
jQuery.post(
    MyAjax.ajaxurl, etc 

// works in IE 9 but throws up a confirm dialog box 
jQuery(window).bind("beforeunload", function() { ... 
jQuery.post(
    MyAjax.ajaxurl, etc 
+0

我不认为'unload'和'beforeunload'事件是由所有的浏览器都支持。 –

+0

将不得不是一个同步呼叫或将通过beforeunload返回中止 – charlietfl

+0

我想要做的是捕获滚动的最大距离。每次尝试发布jQuery(window).scroll触发时都会遇到问题,而且效率非常低,因此任何发出信号的用户都将离开页面。 –

回答

1

只是不要每次都发布一个jQuery(window).scroll触发。仅在用户停止滚动时发布。就像这样:

function sendQuery() { 
    console.log('scrolled'); 
} 

var scrollTimeout = null; 
$(window).bind('scroll', function() { 
    if (window.scrollTimeout) { 
     clearTimeout(window.scrollTimeout); 
    } 
    window.scrollTimeout = setTimeout(sendQuery, 200); 
}) 

而一个活生生的例子 - http://jsfiddle.net/AJnk4/

相关问题