2011-04-20 24 views
0

我有以下jquery註冊一個計時器間隔每10秒發生在網頁每當一個輸入按鈕被稱爲btnExport被點擊。如何有條件地註冊window.setInterval onload

if ($) { 
    $(document).ready(function() { 
     $("input[id$='btnExport']").click(function ($e) { 
      // javascript timer function 
      window.setInterval(ExportProgressCheck, 10000); 
     }); 

     function ExportProgressCheck() { 
      $.ajax({ 
       type: "POST", 
       url: "DMZ_Export.aspx/GetExportProgress", 
       contentType: "application/json; charset=utf-8", 
       data: "", 
       dataType: "json", 
       success: AjaxSuccess, 
       error: AjaxFailed 
      }); 
     } 
    }); 
} 

但是,在某些情況下,我需要計時器間隔在加載頁面加載時立即開始計時。我的問題是,我不知道如何從代碼隱藏的頁面加載事件中執行此操作。從理論上講它會去像...

protected void Page_Load(object sender, EventArgs e) { 
    if (!Page.IsPostBack) { 
     if (IsExportInProgress()) { 
      // Register the timer interval now!! How do I do this?? 
      // window.setInterval(ExportProgressCheck, 10000); 
      } 
     } 
    } 
} 

我試圖通過註冊一個啓動腳本來做到這一點,但它不喜歡的劇本,因爲它不知道ExportProgressCheck是什麼...

ClientScriptManager cs = Page.ClientScript; 
cs.RegisterStartupScript(cstype, csname1, 
    "<script type=\"text/javascript\">window.setInterval(ExportProgressCheck, 10000);</script>", 
    false); 

對此的任何幫助將不勝感激!謝謝!

+0

您已將它附加到document.ready,意思是onDomReady。你可以嘗試附加到window.load,但我沒有看到問題。 – Zirak 2011-04-20 21:19:05

回答

0

轉到另一條路拉這一關。我使用jQuery的$ get函數來打另一個aspx頁面來獲取條件值。

if ($) { 
    $(document).ready(function() { 

     $.get("ExportInProgCheck.aspx", function (response) { 
      if (response != '') 
       window.setInterval(ExportProgressCheck, 10000); 
     }); 
    }); 
} 

ExportInProgCheck.aspx直接返回「真」,如果條件滿足,此時window.setInterval被設定。

0

你在正確的軌道上。

一些點

  1. 你不需要添加<腳本.. >標籤調用的RegisterStartupScript時,就指定爲最後一個參數真。

  2. 看起來您的ExportProgressCheck在window.setInterval行命中時尚未定義。您可以通過查看源代碼來驗證此功能,以查看函數定義的位置以及您的任務調用所引用的位置。 可能的原因:形成嚴重的js可能會突破。你的頁面加載後可以使用該功能嗎?你可以打開一個JavaScript窗口並調用它?

  3. 剛注意到$(document).ready line ... yes。在完整的BODY元素被分析後執行。您需要從該ready子句中取出ExportProgressCheck函數定義。這種方式可用於您的啓動腳本

註冊啓動腳本應該把你的呼叫放在段的底部。你所有的腳本都應該被加載。檢查來源以確定什麼是失控

1

您正在$(document).ready()內發送代碼,即代碼將在dom加載(頁面加載)後立即執行。

你只需要調用setInterval()click功能在一定條件下:

if ($) { 
    $(document).ready(function() { 

     if(condition) 
      window.setInterval(ExportProgressCheck, 10000); 

     $("input[id$='btnExport']").click(function ($e) { 
      // javascript timer function 
      window.setInterval(ExportProgressCheck, 10000); 
     }); 

     function ExportProgressCheck() { 
      $.ajax({ 
       type: "POST", 
       ... 
+0

雖然我無法確定條件是否在.js文件中得到滿足。我確定在Page_Load事件期間是否滿足條件。 – Jagd 2011-04-20 22:20:49

+1

難道你不能使用隱藏的輸入,並在'Page_Load'期間將條件放在那裏,然後用'javascript'來檢索它? – manji 2011-04-20 22:34:40

+0

我有一個類似的想法,但我希望有一個更容易的答案。雖然從它的外觀來看,這將是我最終做的事情。謝謝您的幫助。 – Jagd 2011-04-21 14:41:55