0

我有以下 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);

对此的任何帮助将不胜感激!谢谢!

4

3 回答 3

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",
                ...
于 2011-04-20T22:10:19.970 回答
0

你在正确的轨道上。

一些要点

  1. 调用 RegisterStartupScript 时不需要添加 <script..> 标签,只需指定 true 作为最后一个参数。

  2. 当 window.setInterval 行命中时,您的 ExportProgressCheck 似乎尚未定义。您可以通过简单地查看源代码来验证这一点,查看函数的定义位置以及赋值调用引用的位置。可能的原因:格式不正确的 js 可能会被破坏。该功能在您的页面加载后可用吗?你能打开一个javascript窗口并调用它吗?

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

注册启动脚本应该把你的电话放在段的底部。你所有的脚本都应该被比加载。检查源以确定什么是不正常的

于 2011-04-20T21:56:57.880 回答
0

通过走另一条路线来实现这一目标。我使用 jQuery 的 $get 函数来访问另一个 aspx 页面以获取条件值。

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

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

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

于 2011-04-21T15:27:33.443 回答