2013-12-16 36 views
1

我正在研究打印IFrame的Opera解决方法。现在我们都知道打印Iframe的唯一方法就是在新窗口中打开它并打印出来。我面临的问题是,当我的IFrame在新窗口中打开时,会触发一系列ajax调用,并且在所有ajax调用完成时打开打印窗口。我搜索了一下,发现了全局回调事件ajaxComplete。我有我的代码是这样的:AjaxComplete不能正常工作

if($.browser.opera){ 
      var href = $("iframe:visible")[0].contentWindow.location.href; 
      var printWindow = window.open(href, "printWindow", "scrollbars=yes"); 
      printWindow.onload = function(){ 
       $(this.document.getElementsByClassName("f-buttons")).hide(); 
       $(this.document.getElementsByClassName("f-progress")).hide(); 

      } 
      $(printWindow.document.body).ajaxComplete(function(event, xhr, settings){ 
       printWindow.print(); 
      }); 
      $(printWindow).ajaxComplete(function(event, xhr, settings){ 
       printWindow.print(); 
      }); 


     } 

我不知道为什么事件是没有得到一开始我还试图在该文件触发的ajaxComplete的文件表明,它应该只被附加到文件,但一些人们在这里建议它可以附着在身体上,所以我也尝试过在身体上,但它没有得到初始化。任何人都可以告诉我我错过了什么?

+0

你的问题是document.body它执行该页面上的所有ajax。 –

+0

@ Mr.G - 对不起,我没有得到你。 – Sourabh

回答

2

从jQuery文档,第一:

在jQuery 1.8的,所述.ajaxComplete()方法只应附 来记录。

和2:

如果$。阿贾克斯()或$ .ajaxSetup()被调用,设置为 虚假全球选项,.ajaxComplete()方法将不会触发。

我不明白你是怎么调用AJAX的,但是我可以看到你正在将ajaxComplete方法附加到'body'而不是文档所指的文档中。

试试这些,让我知道发生了什么事。

+0

真的......我将ajaxComplete更改为ajaxStop,因为我希望printwindow在所有ajax调用完成后打开。现在自$ .ajax()需要全局选项为true,默认情况下总是仍然需要确认,我在onload回调下调用一个假的ajax调用$ .ajax({global:true})。它似乎工作,但我不知道是否将ajaxStop附加到文档或正文。哪一个是正确的方法? – Sourabh

+0

那么,如果您将ajaxComplete附加到“文档”中,我会说将ajaxStop附加到“文档”中。 –

+0

我正面临另一个问题,就是onload在处理程序被附加到事件回调之前触发。你能给我最后发生的事件吗? – Sourabh