2016-07-25 105 views
0

我需要一個函數作爲一個公共,所以我可以在任何jQuery選擇器內調用它, 這裏是代碼。 注意:控制檯說checkFeat fn沒有定義。訪問jquery選擇器內的函數

(function checkFeat() { 
    $(".feat").each(function(){ 
     if (!$(this).hasClass("active")) { 
      $(this).children("P").css("display","none") 
     } 
     else 
     { 
      $(this).children("P").css("display","block") 
     } 
    });  
}()); 

$(".feat h5").on("click",function(){ 
    $(this).parent(".feat").addClass(function(index ,currentClass){ 
     checkFeat(); //console says this function is not defined why ?!! 
     return "active"; 
    }); 
}); 
+4

拆除包裝和調用括號並調用它像你將任何正常功能。 – 2016-07-25 18:10:00

+0

這是正確的。自調函數不能從JavaScript中的任何其他地方調用。 – mhodges

+0

至於「爲什麼」,這是因爲具有名稱的函數*表達式將名稱作用於函數本身的名稱,所以它只能在該函數中使用。 – 2016-07-25 18:16:46

回答

2

在你的JavaScript文件,你可以這樣寫:

function checkFeat() { 
    $(".feat").each(function(){ 
     if (!$(this).hasClass("active")) { 
      $(this).children("P").css("display","none") 
     } 
     else 
     { 
      $(this).children("P").css("display","block") 
     } 
    });  
} 

$(".feat h5").on("click",function(){ 
    $(this).parent(".feat").addClass(function(index ,currentClass){ 
     checkFeat(); //console says this function is not defined why ?!! 
     return "active"; 
    }); 
}); 

這時如果要單獨調用的函數,你可以簡單地調用:

checkFeat(); 
+0

感謝兄弟它工作正常:) – Abdallah

0

你限制了checkFeat()closure內部,無法在封閉環境之外使用。刪除它,一切都應該完美。

MDN JS DOCS

閉包是指獨立的(自由)的變量 功能(即在本地使用的變量,但在一個封閉的範圍所定義的)。 換句話說,這些功能'記住'它們創建的環境,其中 。

function checkFeat() { 
    $(".feat").each(function(){ 
     if (!$(this).hasClass("active")) { 
      $(this).children("P").css("display","none") 
     } 
     else 
     { 
      $(this).children("P").css("display","block") 
     } 
    });  
} 

$(".feat h5").on("click",function(){ 
    $(this).parent(".feat").addClass(function(index ,currentClass){ 
     checkFeat(); 
     return "active"; 
    }); 
});