2013-02-25 40 views
1

代码javascript函数我已经准备好一个文件里面的函数:访问从后面

$(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'); 
    } 
}); 
+0

你为什么试图在另一个函数里面声明一个函数?这看起来很奇怪!你说你需要这个在准备就绪 - 请你能详细说明这个陈述来解释为什么你必须这样做吗? – 2013-02-25 12:55:54

+0

您需要全局声明它。 – Red 2013-02-25 12:55:59

+0

你的第二个例子是无效的JavaScript语法。 – 2013-02-25 12:58:04

回答

2

尝试:

var test1; 

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

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

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

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

+0

值得注意的是,准备好的JS文档会在Page_Load后面的代码后被调用,因此可能会导致另一个呃逆。 – webnoob 2013-02-25 12:59:03

+0

@webnoob:注意。 – 2013-02-25 13:02:03

+0

我想这是我的问题,因为我想要做的是在页面加载中... – FrankP 2013-02-25 13:33:13

0

(的一部分),你的问题是,你的ScriptManager.RegisterStartupScript调用使test1();调用某个地方在它立即执行你的网页的HTML,但$(document).ready(function() { ... });包裹定义的test1意味着函数不存在,被称为直到该页面,包括该呼叫,已经被加载。

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

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

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