2014-10-05 48 views
0

我已經實現了一個jQuery菜單,其中的項目和功能是動態分配的。 This code worksjQuery:功能動態分配不起作用

但因爲我需要隱藏菜單選項時被點擊時,我改變了

p.click(funcs[i].f); 

p.click(function(){ 
    menu.hide(); 
    funcs[i].f; 
}); 

here,但我得到Uncaught TypeError: Cannot read property 'f' of undefined因爲變量i出來的界限。如何解決這個代碼?

+0

'funcs'在哪裏? – 2014-10-05 15:46:12

回答

0

我建議:

for (var i = 0; i < len; i++) { 

    (function(i){$('<p />', { 
     'style' : 'cursor: pointer', 
     'text' : funcs[i].title, 
     'click' : function(){ 
      funcs[i].f(); 
      menu.hide(); 
     } 
    }).appendTo(menu)})(i); 
} 

JS Fiddle demo

以上內容將i變量傳遞到內部範圍,並使用稍微不同(由於個人偏好)的方法來創建<p>元素。

+0

謝謝,這個工程,你能澄清'內部範圍'? – ps0604 2014-10-05 16:02:06

+0

我真的很希望我能,但我自己並不真誠地理解。我*認爲*有時候我會這樣做,但是我試着構建一個解釋,並陷入自相矛盾的嘗試和隱喻之中。所以,我真正可以做的是指出你在這個答案中的解釋:http://stackoverflow.com/a/9054695/82548,並在這裏缺乏有用的信息道歉。 – 2014-10-05 16:18:34

+0

「在JavaScript中,作用域是您可以訪問的一組變量,對象和函數。 JavaScript具有函數作用域:作用域內的作用域更改。 (來自W3school) 大衛托馬斯所說的是,在函數內部,'i'與函數外部的'i'不同(即第一行的'i'和他的代碼的最後一行),因此它的「內部範圍」。如果在@DavidThomas的代碼中函數的參數是用另一個字母(例如j或k,或者甚至是'inner_i' ;-))命名的,那麼解釋會更簡單。 – laruiss 2014-10-05 16:46:06

0

試試這個:

 (function(idx) { 
      p.click(function(){ 
       menu.hide(); 
       funcs[idx].f(); 
      }); 
     })(i); 
+0

謝謝,但不知道如何實現這 – ps0604 2014-10-05 16:02:33