2011-04-20 85 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