1

我在文档中准备了一个函数:

$(document).ready(function () {
    function test1() {
        alert('successful');
    }
});

现在在后面的代码(C#)中我有这个:

ScriptManager.RegisterStartupScript(this, typeof(Page),"Con121", "test1();", true);

这不会弹出警报...但是如果我将其从就绪功能中取出,则可以正常工作。我需要这个准备工作。

我什至尝试过这样做但没有成功:

$(document).ready(function () {
    window.test1 function test1() {
        alert('successful');
    }
});
4

2 回答 2

2

尝试:

var test1;

$(document).ready(function () {
    test1 = function () {
        alert('successful');
    }
});

这里的问题是范围界定。由于您是test1从另一个函数 ( ready) 中声明您的函数,因此您从代码隐藏创建的启动脚本将无法从ready函数外部访问它。

此外,您需要确保您的启动脚本被触发,jQuery.ready否则您可能会尝试调用未分配的变量。

最后,如果不需要从 withing 明确声明函数ready,只需将其完全移出,以便函数声明和赋值都存在于全局范围内。

于 2013-02-25T12:55:30.747 回答
0

(部分)您的问题是您的ScriptManager.RegisterStartupScript调用将test1();调用放在页面的 HTML 中的某个位置,它会立即执行,但是$(document).ready(function () { ... });包装定义意味着该函数直到页面(包括调用)之后test1才被调用已经加载。

没有理由等待文档准备好定义您的函数,那么为什么不直接定义它呢?

或者,为什么不删除并在定义之后立即ScriptManager.RegisterStartupScript调用呢?test1();这将在页面完成加载后立即调用它:

$(document).ready(function () {
    function test1() {
        alert('successful');
    }
    test1();
});
于 2013-02-25T13:00:22.793 回答