【问题标题】:Call jQuery function from JavaScript [closed]从 JavaScript 调用 jQuery 函数 [关闭]
【发布时间】:2012-03-21 06:56:13
【问题描述】:

我有一些 jQuery 代码:

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

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

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

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

【问题讨论】:

  • someFunc 只是在另一个函数内部定义的一个函数……它与 jQuery 无关。

标签: javascript jquery


【解决方案1】:

仅仅在你传递给$() 的闭包(函数)中定义一个函数并不能将它放在jQuery fn 对象上。为此,您必须明确地这样做:

$.fn.someFunc = someFunc;

通常,您不会$() 的回调中执行此操作,您会更早执行此操作。插件这样做是为了添加功能,这些功能在 DOM 准备就绪之前应该已经存在

举个例子,这里有一个愚蠢的小插件,可以把文本变成绿色:

(function($) {
  $.fn.green = green;
  function green() {
    return this.css("color", "green");
  }
})(jQuery);

...你可以从 DOM 中使用:

jQuery(function($) {

  $(".foo").green();

});

Live example | Live source

请注意,对它的调用来自 jQuery 实例,而不是直接来自 $.fn

【讨论】:

  • 感谢您的简单解释。
【解决方案2】:

someFunc 函数不是“jQuery 函数”,它是在 (jQuery) DOMContentLoaded 事件处理程序中定义的函数。

您无法从外部访问它,因为它超出了范围。只需在负载处理程序之外声明它,它就可以访问:

$(function(){ 
    // nothing here , but you can call someFunc() if you want
});

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

function test(){    
    someFunc(); // works!
}

【讨论】:

    【解决方案3】:

    在 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.克劳德的回答,会让你更加理解。

    【讨论】:

    • "... jquery 的 fn 只是 javascript 原型的别名..." 你的意思是 jQuery.prototype (奇怪的是,这也是从 jQuery.fn.init.prototype 引用的,因为jQuery 使用new jQuery.fn.init 创建实例)。
    • 是的,看看这个stackoverflow.com/questions/1755080/…,是不是我理解错了?
    • @Sheikh Heera:我不明白你的问题。该链接所做的只是(不完整地)重申我上面所说的内容。请注意“javascript”!=“jquery”。
    • @T.J. Crowder,我问你我说“jquery 的 fn 只是 javascript 原型的别名”是对还是错,我的理解错了吗?
    • @Sheikh Heera: 什么的“javascript的原型”?这句话本身对我没有任何意义。这就是为什么我说“JavaScript!= jQuery”
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多