2016-07-25 3 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

Удаляют обертку и вызов, и скобки ссылаться на него, как и любой нормальной функции. –

+0

Это правильно. Самозапускаемые функции не могут быть вызваны нигде в javascript. – mhodges

+0

Что касается «почему», это потому, что выражение функции * с именем привязывает имя к телу самой функции, поэтому оно может использоваться только в этой функции. –

ответ

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"; 
    }); 
});