从JavaScript调用jQuery函数

时间:2012-03-20 22:31:14

标签: javascript jquery

我有一些jQuery代码:

$(function(){ 
function someFunc(){
    /*do something*/
};
.............   
});

现在我想从JavaScript调用someFunc,如下所示:

function test(){    
$.fn.someFunc();
}

但它不起作用!我看过一篇文章how to call function in jquery from javascript。可能吗?

3 个答案:

答案 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();

});

Live example | Live source

请注意,对它的调用来自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.克劳德的答案,它会给你更多的理解。