Pourquoi ne puis-je pas utiliser onClick pour exécuter une fonction dans une fonction jQuery $ (document) .ready?
Je suis nouveau sur le Javascript et le jQuery. Je veux cliquer sur un bouton et avoir un js fonction exécutée. (Pour cet exemple, c'est juste une alerte, mais c'est en fait une fonction ajax.)
Le premier message d'alerte s'affiche, mais lorsque je clique sur le bouton, je n'ai jamais voir le second ("ai") alert. Il ressemble javascript ne pense pas le faire() la fonction est définie lorsque le bouton est cliqué.
Voici le code correspondant:
$(document).ready(function()
{
alert('ready');
function doIt() {
alert('did it');
};
}
)
<body>
<input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>
source d'informationauteur jalperin
Vous devez vous connecter pour publier un commentaire.
C'est parce que la fonction n'est pas dans un contexte global, qui est l'endroit où votre
onclick=""
est à la recherche pour elle. Vous avez besoin de le déplacer à l'extérieur de votredocument.ready
(il n'est donc pas portée exclusivement sur la fermeture), ou (une meilleure approche de l'OMI) se lient à l'intérieur de ladocument.ready
voici ce que je veux dire par chacun:De liaison à l'intérieur (supprimer votre
onclick=""
pour cela):ou la version anonyme (à nouveau de retirer votre
onclick=""
):Ou de le déplacer à l'extérieur (gardez votre
onclick=""
):Vous définissez doIt dans votre document.prêt comme une instruction de fonction.
Soit vous devez utiliser une expression de fonction
ou déclarer la fonction de la fonction ready.
(oui, le onClick n'est pas vraiment le jQuery façon de faire et devrait probablement être remplacé par un gestionnaire de clic défini dans la fonction ready, mais il fonctionne et est autorisé.
Ce que vous devez faire est de lier un événement "clic" à l'aide de jquery comme ça.
Voici un live jsfiddle démo pour vous: http://jsfiddle.net/8A5PR/
Ici est la page de manuel pour vous: http://api.jquery.com/click/
Javascript a deux sortes de portée mondiale et de niveau de la fonction. Si vous déclarez le faire à l'intérieur d'une fonction, il ne sera pas visible en dehors de la fonction. Il ya quelques façons de le fixer
est un gestionnaire d'événements pour le document.prêt, les fonctions à l'intérieur de ce gestionnaire sont dans la portée.
Une meilleure méthode consiste à insérer un gestionnaire pour votre événement click à l'intérieur, puis appeler cette fonction.
Cela a AUSSI la conséquence de la suppression de votre code de balisage (une bonne chose) que vous pouvez supprimer ce onclick de votre balise input.
Ce que vous faites en ce moment est tout simplement en mettant une fonction doIt() à l'intérieur d'un (à toutes fins et intentions) de la fenêtre.événement onload. Cette fonction ne sera jamais appelé à l'extérieur du document.prêt à moins que vous lier à un élément parce qu'il est coincé à l'intérieur de la portée du document.prêt.
Vous avez besoin de déplacer votre fonction à l'extérieur du document.prêt pour elle peut être appelée par des événements extérieurs.
Juste un petit lien pour référence: http://www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3
...
Oui, comme mentionné par d'autres, vous avez vraiment besoin de déplacer la fonction à l'extérieur de l'jquery prêt déclaration. Veuillez également noter que le javascript est sensible à la casse, par conséquent, vous devez utiliser onClick plutôt que onclick. Ce qui concerne