La fonction onChange n'est pas définie

Cela doit être quelque chose de simple. J'ai cherché Internet et trouvé des erreurs de syntaxe comme cause de ce problème, mais je ne trouve pas une erreur de syntaxe.

Voici le javascript:

<script type="text/javascript" src="http://localhost/acrilart/javascript/jquery-1.6.4.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ function hi(){ alert('hi'); } hi(); }); </script> 

Et le HTML:

 <input type="text" name="cep" value="" id="cep" class="required cep field" onChange="hi()" /> 

Sur la base de données, la fonction hi est appelée comme prévu, mais mon événement onChange provoque une erreur Firebug, indiquant que la fonction n'est pas définie. Je suis vraiment perplexe. Ai-je trompé le «salut»?

La fonction hi ne concerne que le gestionnaire d'événements ready . Déplacez-le à l'extérieur du gestionnaire d'événements ou manipulez la liaison à l'intérieur (et supprimez l'attribut du gestionnaire d'événements en ligne du balisage):

 $(document).ready(function(){ function hi(){ alert('hi'); } $("#cep").on("change", hi); }); 

La fonction hi n'est définie que dans le bloc ready . À l'extérieur, il n'existe plus.

Vous n'avez pas besoin d'envelopper les définitions de fonctions dans .ready() , alors supprimez-le. Vous pouvez aussi définir la fonction comme suit:

 window.hi = function() {...} 

onchange n'est activé que lorsque le contrôle est flou. Essayez onkeypress place.

 $("#cep").on("change", function() { alert(1); }); 

ou

 <input type="text" name="cep" value="" id="cep" class="required cep field" onkeypress="hi()" /> 

Utilisez les événements suivants au lieu de l' onchange :

 - onkeyup(event) - onkeydown(event) - onkeypress(event) 
 <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> function hi(){ alert('hi'); } </script> <input type="text" name="cep" value="" id="cep" class="required cep field" onKeyPress="javascript:hi();" /> 

Dans votre bloc de code:

 <script type="text/javascript"> $(document).ready(function(){ function hi(){ alert('hi'); } hi(); }); </script> 

hi n'est pas une fonction globale. Vous ne pouvez l'accéder que dans la portée de votre function(){...} , pas de l'extérieur.

Puisque vous utilisez jQuery, vous pouvez modifier la façon dont vous liez votre fonction à l'événement onChange . Plutôt que de l'appeler à partir de la balise html, vous pouvez écrire:

 <script type="text/javascript"> $(document).ready(function(){ function hi(){ alert('hi'); } hi(); $('#cep').on( 'change', function(){ hi(); } ); }); </script>