2011-08-18 39 views
0

我有這個功能爲特色的這段代碼(編輯爲簡潔):在其他功能該功能一個問題關於適用範圍 - jQuery的

(function ($) { 

    // mouseenter event for each menu item 
    $menuItems.bind('mouseenter', function (e) {}); 

})(jQuery); 

我想要做的是訪問$的菜單項。

例如:

$("#products a").click(function(){ 
    $menuItems.unbind("mouseenter"); 
}); 

我相信這是範圍回事?

我不確定如何做到這一點?

+0

用'$窗口定義menuItems'它,這將是全球 – mowwwalker

回答

0

第三個選項:

(function ($) { 

    var $menuItems = /* whatever */; 

    $menuItems.bind('mouseenter', function (e) {}); 

    // "export" the variable 
    window.$menuItems = $menuItems; 
})(jQuery); 
+0

感謝大家幫助!這個答案在我的代碼設置中效果最好。我很感激。 – Yahreen

0

代碼之前,添加

var $menuItems 

,它應該工作。順便說一句,你得在你的代碼語法錯誤,你就錯過

}); 

(所以它看起來像)

(function ($) { 

    // mouseenter event for each menu item 
    $menuItems.bind('mouseenter', function (e) { 
     //something 
    }); 
})(jQuery); 
+0

的菜單項中的一個變種已聲明。我不知道這是什麼阻止我讓這個工作?下面是我的意思的縮寫小提琴:http://jsfiddle.net/k9eAn/ – Yahreen

0

你必須在全局命名空間來聲明$的菜單項,從字面上像舉個例子:

<script type="text/javascript"> 
    var $menuItems = something; 
</script> 

您的IDE可能會抱怨說$ menuItems沒有被定義,但是對於JavaScript來說,它會是。

就範圍而言,如果你有一個函數或匿名方法,並且有這樣行內它:

var myVar = somethingElse;

然後選擇範圍定義了myVar的只知道要什麼其他內部功能或方法。

如果您將聲明放在函數主體之外,那麼它將可用於任何可用的函數/方法。 至於最佳實踐,這可能並不總是一件好事,它與使用全局變量和聆聽comp.sci教授類似,但是如果您知道代碼的範圍並且對您的命名約定敏感,那麼您的名字就會贏得與其他任何事情都沒有衝突,你一般都沒問題。