2010-04-05 11 views
1

Je cette fonction simple:javascript: problème avec la fonction

<script type="text/javascript"> 
//<![CDATA[ 
    jQuery(function($){ 
     function here(b){alert(b);} ; 
     here(6); 
    }); 
//]]> 
</script> 

et j'ai ce bouton à la page:

<button onclick="here(7);">TEST</button> 

Les feux d'alerte sur la charge de la page, mais pas sur le bouton clic. Si je remplace le ici (7) par alerte, cela fonctionne bien. Pourquoi ne fonctionne-t-il pas avec la fonction si?

Alan

Répondre

4

Parce que votre fonction est définie dans une fonction, il a une portée limitée. Pour accéder à la fonction globalement, vous devez la définir globalement. Mais, ce n'est pas recommandé. C'est pourquoi vous utilisez des bibliothèques comme jQuery, pour éviter toutes les globales et pour garder les choses discrètes. La meilleure solution pour vous serait de changer le balisage à cette ...

<button id="myBtn">TEST</button> 

Et puis attribuez-lui le gestionnaire de clic programme dans la même zone que votre fonction définie ...

<script type="text/javascript"> 
//<![CDATA[ 
    jQuery(function($) { 
     function here(b) { alert(b); };  
     here(6); 

     $("#myBtn").click(function() { 
      here(7); 
     }); 
    }); 
//]]> 
</script> 

séparation comportementale c'est beaucoup mieux, n'est-ce pas?

+0

Pas vraiment. Dans ce cas, mon modèle alimenterait les paramètres de chaque fonction, si je le fais discrètement, alors je devrais faire un script beaucoup plus complexe, qui lit ces paramètres à partir des éléments autour du bouton ... dans tous les cas. Je comprends, ce que vous voulez dire, alors je vais le faire d'une manière différente. –

+0

* qui lit ces paramètres à partir d'éléments autour du bouton * Quoi? Vous n'avez pas besoin de faire quelque chose comme ça. Quand vous dites "de mon modèle", vous voulez dire que ce sont des valeurs qui viennent du système backend (PHP ou autre)? –

0

Vous définissez la fonction here dans une autre fonction (voir closures). Cela signifie que la fonction here est uniquement disponible dans le cadre de jQuery(function($){

Essayez:

<script type="text/javascript"> 
//<![CDATA[ 
    function here(b){alert(b);} ; 
    jQuery(function($){ 
     here(6); 
    }); 
//]]> 
</script> 
Questions connexes