2013-05-08 85 views
0

我很好奇爲什麼這不起作用。這是更假設的,但我在我正在做的網站上遇到了這個問題。我試圖避免一個函數內的jQuery函數。這個選擇器是窗口而不是每個框。 。jQuery每次調用其他函數

編輯* ** 我明白如何做到這一點做$( 「箱子」)每個(函數(){//代碼在這裏});但它是不是馬虎或壞功能內的功能?

http://jsfiddle.net/B8Yp3/3/

CSS

.box { 
    height: 50px; 
    width: 50px; 
    background: green; 
    margin-bottom: 5px; 
} 

HTML

<div class="box"></div> 
    <div class="box"></div> 
    <div class="box"></div> 

的Javascript

function changeMe(obj) { 
     console.log(obj); 
     $(obj).css("background", "blue"); 
    } 

    $.each($(".box"), changeMe(this)); 
+0

'$ .each($(「。box」),changeMe);' – 2013-05-08 16:03:52

+2

不;函數內部的函數是完全正常的。閉包是Javascript最重要的語言特徵之一。 – SLaks 2013-05-08 16:15:41

回答

3

其次每個paramater必須功能 - 不是函數結果:

$(".box").each(changeMe); 

function changeMe(n, obj) { ........ 
+0

如果使用這種方法,則需要更改'changeMe()'函數的參數。 – JJJ 2013-05-08 16:05:45

+0

您需要將'changeMe'簽名更改爲'changeMe(n,obj)' – 2013-05-08 16:06:18

+0

如果您需要添加其他參數,或者我應該只依靠全局進行操作,該怎麼辦? – chadpeppers 2013-05-08 16:10:44

4

當你調用$.each功能,如您所述,仍指窗口對象。要讓this引用jQuery對象,可以在匿名函數中調用它,從而得到適當的範圍。

$(".box").each(function(){ 
    changeMe(this); 
}); 

一點題外話,這是絕對不壞的做法,草率,或任何負面影響任何在Javascript調用其他函數中的功能。事實上,它是Javascript編程的基石(其最重要的概念之一,回調函數依賴於其他函數內部的函數)。函數是Javascript中的一等公民,所以它們可以被傳遞,被阻塞在其他函數中,並被視爲任何其他對象。

您可能有興趣閱讀關於MDN documentation中功能的更多信息。他們解釋了很多關於函數是對象,嵌套函數,閉包等的內容,如果您想了解如何最好地使用函數,可能會對您感興趣。

+0

我明白,工作,我沒有問題,但是它不是馬虎或壞的做法在JavaScript中有一個函數內的函數? – chadpeppers 2013-05-08 16:03:50

+1

絕對不是。事實上,這是Javascript中最重要的因素之一。 – 2013-05-08 16:04:32

+0

這將是JQuery – Eugene 2013-05-08 16:04:33

2

因爲$.each的第二個參數應該是function

如果傳遞changeMe(this),要傳遞的changeMe返回值 - 你應該把它包裝成一個匿名函數:

$.each($(".box"), function(){ 

    changeMe(this) 

});