2009-07-28 13 views
62

功能我是一個新手編程,我無法弄清楚如何存儲功能的jQuery和它在多個地方運行。如何運行的jQuery

我:

$(function() { 
    $("div.class").click(function(){ 
    //Doo something 

    }); 

    $("div.secondclass").click(function(){ 
    //Doo something 
    }); 

}); 

現在2「//鬥出頭」是一樣的,我不想寫一遍相同的代碼。

如果我把:

$(function() { 

    function doosomething() 
    { 
    //Doo something 
    } 

    $("div.class").click(doosomething); 

    $("div.secondclass").click(doosomething); 

}); 

,將運行在頁面加載的功能,而不是其卡時纔可用。

如何正確執行此操作?

謝謝!

回答

108

下應該很好地工作。

$(function() { 

    // Way 1 
    function doosomething() 
    { 
    //Doo something 
    } 

    // Way 2, equivalent to Way 1 
    var doosomething = function() { 
    // Doo something 
    } 

    $("div.class").click(doosomething); 

    $("div.secondclass").click(doosomething); 

}); 

基本上,你可以聲明你的功能在相同的範圍內,您將可以使用它(JavaScript使用Closures確定範圍)。現在

,因爲在JavaScript函數的行爲就像任何其他對象,你可以簡單地分配doosomething的功能通過使用點擊呼叫.click(doosomething);

你的功能將不會執行,直到你把它用doosomething()doosomething()指的是功能,但不會稱呼它)或其他函數調用(在這種情況下,click處理器)。

+1

感謝您方式2,我得試試那。但是這個函數確實是在頁面加載時運行的,因爲在jquery中$(function()是文檔加載的簡寫。至少如此,方法1將不起作用。 – Corin 2009-07-28 03:58:53

+0

方式1確實有效......我只是對它進行了測試。 – 2009-07-28 04:13:29

+2

我對jQuery很新,所以你可以解釋第一行`$(function(){`?這行的目的是什麼?tyvm – 2012-07-24 02:27:49

18
function doosomething() 
{ 
    //Doo something 
} 


$(function() { 


    $("div.class").click(doosomething); 

    $("div.secondclass").click(doosomething); 

}); 
11

或者(我最好說),你可以做這樣的:

$(function() { 
    $("div.class, div.secondclass").click(function(){ 
    //Doo something 
    }); 
}); 
28

我會做這種方式:

(function($) { 
jQuery.fn.doSomething = function() { 
    return this.each(function() { 
     var $this = $(this); 

     $this.click(function(event) { 
     event.preventDefault(); 
     // Your function goes here 
     }); 
    }); 
}; 
})(jQuery); 

然後在文件準備就緒,你可以做這樣的事情:

$(document).ready(function() { 
    $('#div1').doSomething(); 
    $('#div2').doSomething(); 
}); 
2

這是最混亂可能的解決方案?我不相信的jQuery的想法是創建類似的代碼this.There也是我們不希望的泡沫事件,這可能是錯誤的假設。

簡單移動doosomething()$(function(){}之外將使它具有全局範圍並保持代碼簡單/可讀。

5

你也可以做到這一點 - 既然你要到處使用的一個功能,您可以通過直接調用JqueryObject.function這樣做()。例如,如果你想創建自己的函數來操縱元素上的任何CSS:

jQuery.fn.doSomething = function() { 
    this.css("position","absolute"); 
    return this; 
} 

,並呼籲它的方式:

$("#someRandomDiv").doSomething();