Arm*_*nco 0 javascript jquery scope href
我喜欢将我的所有JQuery函数和事件接收器扩展到$(window).load,如下所示:
$(window).load(function ()
{
function Foo(id)
{
alert(String.format("Do Foo for: {0}", id));
}
});
Run Code Online (Sandbox Code Playgroud)
通常,我在这个范围内完成所有工作,但我有一个案例,我想从一个独立的JQuery小部件构建的HREF中调用Foo(27).HREF看起来像这样:
<a href="javascript:Foo(27)">Click me!</a>
Run Code Online (Sandbox Code Playgroud)
但是,单击链接时找不到Foo()函数.我怎么能这样做?
[编辑]
所以,我刚接受了下面的答案,并希望分享我的最终实施.Foo()已被我正在使用的实际方法的名称所取代.是的,我知道String.format()本身不存在; 它是我自己的基础库的一部分.考虑到这一点,这就是我所拥有的.这是我定义所有全局命名空间的文件.该定义存在于jQuery范围之外.
// This is defined in the global namespace
if (typeof (window.App) === "undefined")
{
window.App = {};
}
Run Code Online (Sandbox Code Playgroud)
这是构建HREF的jQuery小部件中的一行.标题用于预测,HREF导航到该预测的详细信息页面:
r = String.format('<a href="javascript:App.NavDetails({1});" class="link3">{0}</a>',
Predikt.General.EncodeHtml(options.rowData.Title),
options.rowData.PredictionId);
Run Code Online (Sandbox Code Playgroud)
这是我的$(window).load() - 范围的jQuery文件中的NavDetails函数的实际实现:
$(window).load(function ()
{
App.NavDetails = function (id)
{
// Do something interesting with the ID here...
alert(String.format("The ID is: {0}", id));
};
});
Run Code Online (Sandbox Code Playgroud)
你可以这样做
$(window).load(function (){
window.Foo = function(n){
alert(n);
}
});
Run Code Online (Sandbox Code Playgroud)
或这个
var Foo;
$(window).load(function (){
Foo = function (n){
alert(n);
}
});
Run Code Online (Sandbox Code Playgroud)
IMO,更好的方法是为您的应用程序设置命名空间,这样您就不会污染全局命名空间
window.App = {};
$(window).load(function (){
App.Foo = function (n){
alert(n);
}
});
Run Code Online (Sandbox Code Playgroud)
然后,在你的HTML中,你会称之为:
<a href="javascript:App.Foo(27)">Click me!</a>
Run Code Online (Sandbox Code Playgroud)
但是,您可能需要考虑从脚本而不是标记中调用它.