如何在onload期间有条件地注册window.setInterval

时间:2011-04-20 21:16:07

标签: jquery asp.net pageload registerstartupscript

我有以下jquery,只要点击一个名为btnExport的输入按钮,就会在网页上每隔10秒注册一个计时器间隔。

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);

对此有任何帮助将非常感谢!谢谢!

3 个答案:

答案 0 :(得分: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",
                ...

答案 1 :(得分:0)

你走在正确的轨道上。

一些要点

  1. 您无需添加&lt; script ..&gt;调用RegisterStartupScript时的标记,只需将true指定为最后一个参数。

  2. 当window.setInterval行命中时,您的ExportProgressCheck似乎尚未定义。您可以通过查看源代码,查看函数的定义位置以及分配调用引用它的位置来验证这一点。 可能的原因:形成不良的js可能会破裂。页面加载后是否可以使用该功能?你可以打开一个javascript窗口并调用它吗?

  3. 注意到$(document).ready line ... yes。将在整个BODY元素被解析后执行。你需要从那个ready子句中取出ExportProgressCheck函数定义。这样,它可用于您的启动脚本

  4. 注册启动脚本应该将您的调用放在段的底部。你应该加载所有脚本。检查来源以确定什么是不明智的

答案 2 :(得分:0)

通过另一条路线将其拉下来。我使用jQuery的$ get函数来命中另一个aspx页面来获取条件值。

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

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

如果满足条件,ExportInProgCheck.aspx只返回'true',此时window.setInterval被设置。