2011-11-23 35 views
2

我在標題上做了一個快速Google,並用所有這些我不明白的代碼敲打。要調用Javascript函數的事件當innerHTML已完成100%時

我一直在JavaScript編程幾年,現在對大多數概念都很滿意。除事件處理外。嚇到我了!

我有我寫了一個腳本,針對一格,即垂直滾動基於純粹的鼠標位置的DIV的問題。

我得到容器的高度,以及將「溢出」的內部容器的高度。

將它們分開以獲得「差異」,然後通過此差異多倍鼠標位置以根據鼠標位置獲取div滾動。

它給了我一個不錯的乾淨滾動!

(如果有人想在更多的相關信息只問)

我的問題是。這個div的內容由ajax生成。

因此,當計算內部和外部div的高度的代碼運行時,它會給出不正確的高度,因爲它們還沒有被數據填充。

因此,當ajax已將數據複製到innerHTML以調用mousescroll函數時,我需要觸發一個函數。

額外

問題:我有一個填充滾動格2所AJAX調用。有時一個在另一個之前被提取,反之亦然。所以我需要mousescroll函數來觸發WHEN,並且只有當兩個ajax調用已經完全將所有數據輸入到它們可以使用的html中!

我在想只是增加一個setTimeout,但是...我不喜歡強迫我的腳本等待!

+0

您是否使用任何框架/庫/實用程序函數爲您的ajax調用? – bezmax

+0

即使我想在同樣的工作,我使用.net 4.0。好的問題,解決方案會很有趣:) – Murtaza

+0

起初我並不想依賴於jquery,但在意識到我無法修復跨瀏覽器依賴性*咳嗽* IE *咳嗽*我決定去jQuery-1.7.1 –

回答

1

我不是100%清楚問題出在哪裏。你寫道:「當ajax已經將數據複製到innerHTML來調用mousescroll函數時,我需要觸發一個函數。」 - 你需要幫助那部分嗎?如果您使用的是jQuery,那麼您只需撥打$.ajaxsuccess回調函數中的mousescroll函數即可。

正如你指出的,但是,這是由你帶了另一個問題複雜化:實際上有兩個Ajax調用,你想他們調用mousescroll功能之前完成。要解決這個問題,只需創建一個等於零的變量,然後在success回調中增加它。這些回調還會檢查變量的值,如果它等於1(表示Ajax調用已完成),請調用mousescroll函數。

僞代碼:根據您的descripion

var numOfAjaxCalls = 0; 

$.ajax({ 
    ... 
    success: function(){ 
     if(numOfAjaxCalls = 1){ 
      mousescroll(); 
     }else{ 
      numOfAjaxCalls++; 
     } 
    } 
}); 
+0

對不起,混淆。基本上我需要在ajax獲取數據時運行一個函數。然而。我的ajax函數獲取大量的json數據,解析它,然後使用.innerHTML方法,將解析的數據插入到容器中,現在發生了兩次。我想過關於「成功」命令的功能,但是......成功事件在接收到ajax時觸發,還是在innerHTML函數完成時觸發?因爲我真的需要在發射前確保容器已滿。並且「成功」似乎只在請求成功時才被調用!謝謝 –

+0

@ AlexMorley-Finch:我認爲innerHTML是同步的,所以沒有辦法處於「innerHTML沒有完成」的狀態 – hugomg

+0

@ AlexMorley-Finch - 當ajax調用完成時,成功處理器觸發成功的)。所以它是在成功處理程序中,您將解析JSON並注入HTML。 – maxedison

1

,你需要處理的jQuery的成功事件的AJAX,然後在你的代碼處理實際的「完整」事件一旦兩個AJAX事件已經完成,按照您的要求正確處理。

相關問題