2013-07-08 67 views
0

定義的函數我有一個一個$。每個函數中定義象下面這樣的函數:

var websiteWill; 
$.each(cookieConfig.cookies,function(key, value){           
      var levelName = key,                  
       websiteWill = function(){ 
        alert(this.id); 
        if($('#' + this.id).is(':checked')){ 
         $.each(this.value.will,function(){ 
          $('<li><i class="icon-ok"></i>' + this + '</li>').appendTo(parent + '-' + levelName + '.will ul'); 
         }); 
        } 
       } 
     }); 

當我嘗試調用websiteWill();這樣的:

$(document).delegate('.cookie-trigger', 'click',function(){ 
    websiteWill(); 
}); 

我得到Uncaught TypeError: undefined is not a function

編輯:我已經聲明的變量爲全局^^

+4

'websiteWill'是本地'$ .each'回調。我不明白你想要做什麼。也許如果你*解釋*你想用這段代碼實現什麼,我們可以提出一個更好的解決方案。 –

+0

^^^它在每次迭代時都被覆蓋,並且永遠不會調用。 – adeneo

+2

*「我已將變量聲明爲全局變量」*不是。在回調的第一行看到'var'?這使得本地變量。 –

回答

1

定義函數中的局部環境之外:

var websiteWill = function(element){ 
    alert(element.id); 
    if($('#' + element.id).is(':checked')){ 
     $.each(element.value.will,function(){ 
      $('<li><i class="icon-ok"></i>' + element + '</li>').appendTo(parent + '-' + levelName + '.will ul'); 
     }); 
    } 
}; 

(請注意,我換成引用this一起稱爲element函數的參數,你可以叫別的東西,如果你想引用。)

然後你可以從你的呼叫參考它delegate()

$(document).delegate('.cookie-trigger', 'click', function(){ 
    websiteWill(this); 
}); 

你也可以是原中引用它打電話給each(),但你實際上並沒有任何事情在那個電話,所以我不知道這是什麼目的。

0

Felix Kling說的是對的;你在.each回調函數中聲明瞭函數,這使得它只在該函數中是本地的。如果你想在外面訪問它,你需要將它作爲一個函數編寫,不管怎樣,然後在那裏的.each循環中使用這個新函數。例如寫這樣的功能:

var websiteWill = function(id, value){ 
// code here 
} 

然後調用了。每個

$(document).delegate('.cookie-trigger', 'click', websiteWill(id, value); 
0

裏面試試這個代碼 創建方法fnwebsiteWill

function fnwebsiteWill(ctrl) { 
       var $this = ctrl; 
       alert($this.id); 
       if ($('#' + $this.id).is(':checked')) { 
        $.each($this.value.will, function() { 
         $('<li><i class="icon-ok"></i>' + $this + '</li>').appendTo(parent + '-' + levelName + '.will ul'); 
        }); 
       } 
      } 

fnwebsiteWill是一個你用於。每個

var websiteWill; 
     $.each(cookieConfig.cookies, function (key, value) { 
      var levelName = key, 
       websiteWill = fnwebsiteWill(this); 
     }); 

再次調用同一個函數到委託

$(document).delegate('.cookie-trigger', 'click', function() { 
      fnwebsiteWill(this); 
     }); 
+0

沒有解釋的代碼很少有幫助。請解釋你已經改變了什麼,以及它如何解決問題。 –

+0

好的,我已經更新了我的帖子..謝謝 – Bhaarat