2012-03-20 45 views
5

調用jQuery的功能,我有一些jQuery代碼:從JavaScript

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

,現在我想從JavaScript調用someFunc象下面這樣:

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

但它不工作!我看過一篇文章how to call function in jquery from javascript。可能嗎?

+0

'someFunc'只是另一個函數中定義的函數......它與jQuery無關。 – 2012-03-20 22:32:58

回答

5

只需在關閉(函數)中定義一個函數,您傳遞給$()不會對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

+0

感謝您的簡單解釋。 – zhihong 2017-10-19 12:47:35

1

您的功能someFunc不是「jQuery函數」,它是一個在(jQuery)DOMContentLoaded事件處理程序中定義的函數。

您不能從外部訪問它,因爲它超出了範圍。剛剛宣佈它的負載處理程序之外,這將是訪問:

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

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

function test(){  
    someFunc(); // works! 
} 
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的原型的別名。要叫我「sumFunc」的方法,我剛纔在加入jQuery對象使用

$.fn.someFunc = myFunc; 

我可以做

$('someElement').someFunc(); 

和這條線將調用taht功能,並做一些事來了「someElement」(儘管我什麼也沒做),但希望它足夠清楚。看看T.J.克羅德的回答,它會給你更多的理解。

+0

*「... jquery的fn只是javascript原型的別名...」*您的意思是'jQuery。原型「(這也是奇怪的,從'jQuery.fn.init.prototype'引用,因爲jQuery使用'new jQuery.fn.init'來創建實例)。 – 2012-03-20 23:14:09

+0

是的,看看這個http://stackoverflow.com/questions/1755080/why-jquery-do-this-jquery-fn-init-prototype-jquery-fn,我錯了我的理解? – 2012-03-20 23:19:19

+0

'@Sheikh Heera':我不明白你的問題。所有這些鏈接所做的是重申(不完整)我上面所說的。請注意「javascript」!=「jquery」。 – 2012-03-20 23:23:14