2013-12-16 35 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