2010-07-16 32 views
0

我有一個ASP .NET頁面,我使用jQuery。我用這個功能來搜索一個元件在DOM如何使用延遲腳本的執行直到完成其他事情?

$(文件)。就緒(函數(){

 currentID = $('#ctl00_ContentAreaPlaceHolder_hfCurrentID').val(); 
     if (currentID != "") { 
      window.setTimeout(function() { 
       $("div[class^='element'][ID='" +currentID + "']").trigger("click"); 
       $(window).scrollTop(500); 
      }, 6000); 
     } }); 

是,當執行該代碼不加載的問題人DOM中,因爲我使用ajax調用來創建包含'element_r1c1'(r表示行,c表示列)元素的網格,這就是爲什麼我使用window.setTimeout等待DOM被加載,但這隻適用於DOM因此,我需要一種方法來告訴這個函數在ajax函數結束後執行,有關其他信息,這些代碼位於頁面(.aspx)中,而ajax函數位於一個控件中( .ascx)

更新:

我有兩頁,BasePage,GridPage。控制是在GridPage,由第一頁與

$('#tabs').tabs({ 

     select: function(event, ui) { 
      // default shows All action elements 
      $.ajax({ 
       url: 'GridPage.aspx?viewingDate=' + $(ui.tab).attr('Date'), 
       cache: false, 
       dataType: "html", 
       success: function(data) { 
        //debugger; 
        $('#tabContent').empty().html(data); 
       } 
      }); 
      $('#nPaneArea').html('').removeClass().addClass('Pane'); 
     } 
    }); 
+0

您應該刪除您的問題,並要求一個新的,不是社會維基。 – SLaks 2010-07-16 17:13:13

回答

0

而不是等待任意時間段,然後無條件執行,請檢查您是否實際上每隔幾百毫秒就有任何與您的jQuery選擇器有關的事情。

function triggerClickOnReady(id) { 
    return (function() { 
     var $element = $("#" + id); 
     if ($element.size() > 0) { 
      $element.trigger("click"); 
      $(window).scrollTop(500); 
     } else { 
      window.setTimeout(triggerClickOnReady(id), 200); 
     } 
    }); 
} 

你需要返回一個功能,讓您可以在currentId通過,並與閉合保值。

然後,在success回調在AJAX請求......

success: function(data) { 
    $('#tabContent').empty().html(data); 
    triggerClickOnReady(currentId); 
} 
+0

如果我使用jQuery中的$ .ajax來檢索網格,如何提高事件? – firematta 2010-07-16 17:34:24

+0

或者是有可能在JavaScript中創建一個狀態機? – firematta 2010-07-16 17:35:24

+0

如果您打算將其作爲您在上面發佈的第二個示例代碼的回調函數,可能會更簡單一些。我將編輯我的示例... – jasongetsdown 2010-07-16 17:39:31

4

所以你需要在加載電網的AJAX腳本的成功回調執行該腳本調用。正如你用ASP.NET標記的,我猜你正在使用UpdatePanel觸發AJAX調用。如果是這樣的話,你可以使用endRequest事件:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) { 
    // do the jQuery stuff here 
}); 
+0

這個調用是通過jQuery $ .ajax – firematta 2010-07-16 17:30:15

+2

@firematta進行的,那麼它就更容易了:只需使用jQuery提供的'success'回調。 – 2010-07-16 17:33:25

0

據我瞭解,你要執行DOM加載後的功能,你會得到一個AJAX請求的答覆。

您可以在每個完成處理程序中爲這兩個事件設置一個標誌,並在每個事件中檢查是否設置了另一個標誌,如果是,則執行您的功能。

+0

你能解釋我的代碼嗎?因爲我更像一個後端人,當我去客戶端時我真的很亂。 – firematta 2010-07-16 17:32:04

相關問題