编辑:响应有关在锚元素上以编程方式执行单击事件或使用 window.open 的评论-由于弹出窗口阻止程序,我无法使用这些。我必须允许用户在锚点上的原始 mouseclick 事件完成其过程 - 导致一个畅通的新窗口。
似乎这里最好的折衷方案是执行一个同步 ajax 请求,并在请求完成之前向用户呈现一个微调器 gif。
编辑:小提琴http://jsfiddle.net/cXdJg/35/
考虑带有指向播放器页面的链接的网络编辑器的情况。
单击设置为播放器的 href 链接时,编辑器会检查内容是否已保存到服务器:
如果是:什么都不做。
如果不是:执行 ajax 请求以保存内容。在 ajax 调用结束时:允许锚元素上的点击事件继续;导致在新的浏览器窗口中执行对播放器页面的请求。
如何在不冻结浏览器的情况下延迟拦截锚元素上的单击事件的函数的结束,直到 ajax 调用结束?见http://www.devcheater.com/#Conclusion
我检查了http://ajaxpatterns.org/Submission_Throttling,但看不到如何在此处应用该示例。
代码形式的想法示例:
$('a.play').click(function){
if(!isSaved){
save(); //saves the content and **sets isSaved to true**
}
while (!isSaved){
//burn time until isSaved, but don't freeze the browser!
}
//allow the event handler to end, after which the click on anchor element will
// load the player page in new window.
}