我有一些jQuery代码:
$(function(){
function someFunc(){
/*do something*/
};
.............
});
现在我想从JavaScript调用someFunc,如下所示:
function test(){
$.fn.someFunc();
}
但它不起作用!我看过一篇文章how to call function in jquery from javascript。可能吗?
答案 0 :(得分:5)
只需在传递给$()
的闭包(函数)中定义一个函数,就无法将它放在jQuery fn
对象上。要做到这一点,你必须明确地做到这一点:
$.fn.someFunc = someFunc;
通常情况下,不会在$()
的回调中执行此操作,您之前会这样做。插件执行此操作以添加功能,该功能应该已经之前到DOM准备就绪。
举例来说,这是一个愚蠢的小插件,可以将文本变为绿色:
(function($) {
$.fn.green = green;
function green() {
return this.css("color", "green");
}
})(jQuery);
...您可以从DOM ready中使用它:
jQuery(function($) {
$(".foo").green();
});
请注意,对它的调用来自jQuery实例,而不是直接来自$.fn
。
答案 1 :(得分:1)
您的函数someFunc
不是“jQuery函数”,它是在(jQuery)DOMContentLoaded
事件处理程序中定义的函数。
您无法从外部访问它,因为它超出了范围。只需在加载处理程序之外声明它,它就可以访问:
$(function(){
// nothing here , but you can call someFunc() if you want
});
function someFunc(){
/*do something*/
};
function test(){
someFunc(); // works!
}
答案 2 :(得分:1)
在jquery中
$.fn.someFunc = myFunc;
function myFunc()
{
// Code here
}
类似于普通javascript的
function myObj()
{
// Code here
}
var obj= new myObj();
obj.prototype.someFunc=myFunc;
function myFunc()
{
// Code here
}
这只是一种向对象添加新属性的方法(原型继承),而jquery的fn只是javascript原型的别名。使用
调用我之前添加到jquery对象中的'sumFunc'方法$.fn.someFunc = myFunc;
我能做到
$('someElement').someFunc();
并且这一行将调用taht函数并对'someElement'执行某些操作(虽然我什么也没做),希望它足够清楚。看看T.J.克劳德的答案,它会给你更多的理解。