我喜欢将所有 JQuery 函数和事件接收器的范围限定为 $(window).load,如下所示:
$(window).load(function ()
{
function Foo(id)
{
alert(String.format("Do Foo for: {0}", id));
}
});
通常,我在这个范围内完成所有工作,但我有一个情况,我想从由独立 JQuery 小部件构建的 HREF 调用 Foo(27)。 HREF 如下所示:
<a href="javascript:Foo(27)">Click me!</a>
但是,当我单击链接时,找不到 Foo() 函数。我怎样才能做到这一点?
[编辑]
所以,我刚刚接受了下面的答案,并想分享我的最终实现。 Foo() 已替换为我正在使用的实际方法的名称。是的,我知道 String.format() 本身并不存在;它是我自己的基础库的一部分。考虑到这一点,这就是我所得到的。这是来 self 定义所有全局命名空间的文件。此定义存在于 jQuery 范围之外。
// This is defined in the global namespace
if (typeof (window.App) === "undefined")
{
window.App = {};
}
这是构建 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);
这是我的 $(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));
};
});
最佳答案
你可以这样做
$(window).load(function (){
window.Foo = function(n){
alert(n);
}
});
或者这个
var Foo;
$(window).load(function (){
Foo = function (n){
alert(n);
}
});
IMO,更好的方法是为您的应用程序设置一个命名空间,这样就不会污染全局命名空间
window.App = {};
$(window).load(function (){
App.Foo = function (n){
alert(n);
}
});
然后,在你的 html 中你可以调用它:
<a href="javascript:App.Foo(27)">Click me!</a>
但是,您可能需要考虑从脚本而不是标记中调用它。
关于javascript - 如何从 HREF 调用 $(window).load 中定义的 JQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241097/