如何从HREF调用$(window).load中定义的JQuery函数

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)

jai*_*ime 7

你可以这样做

$(window).load(function (){
    window.Foo =  function(n){
      alert(n);
   }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/JQn8H/

或这个

var Foo;

$(window).load(function (){
    Foo =  function (n){
      alert(n);
   }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/JQn8H/2/

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)

http://jsfiddle.net/JQn8H/3/

但是,您可能需要考虑从脚本而不是标记中调用它.