fonction javascript ne fonctionne pas au sein de jquery $(document).prêt bloc
Je suis en train d'appeler un JavaScript
fonction à partir d'une onclick
déclencheur.
HTML
section:
<div class="my_radio">
<input type="radio" name="my_radio" value="1" onclick="my_func()"/> first button
</div><!-- end of class my_radio -->
Et la JavaScript
code
<script type="text/javascript">
$(document).ready(function(){
function my_func(){
alert("this is an alert");
}
});
</script>
Il ne fonctionne pas.
Mais si je garde le JavaScript
fonction de la $(document).ready()
code, il fonctionne. Suit est l'extrait de code:
<script type="text/javascript">
$(document).ready(function(){
function my_func111(){
alert("this is an alert");
}
});
function my_func(){
alert("this is an alert");
}
</script>
1) Pourquoi ne pas la première JavaScript
extrait de code de travail?
2) Comment puis-je obtenir le premier JavaScript
extrait de code de travail ?
EDIT :
Autant QUE je sache, $(document).ready()
est exécutée lorsque la page web est chargée complètement. Alors, comment puis-je empêcher my_func()
à être actif avant ou après la page de chargement si j'écris my_func()
à l'extérieur $(document).ready()
?
2 mots: une portée lexicale.
comme Alien dit > stackoverflow.com/questions/1047454/what-is-lexical-scope
double possible de Comment puis-je faire une fonction définie dans jQuery.prêts disponibles à l'échelle mondiale?
oh, permettez-moi de comprendre ce que tu dit
OriginalL'auteur Istiaque Ahmed | 2011-11-27
Vous devez vous connecter pour publier un commentaire.
Il est tout à propos de javascript contextes d'exécution et la portée.
Tout ce que vous définissez à l'intérieur d'une fonction est de savoir que dans cette fonction.
Dans votre premier test, la fonction
my_func()
ne peut être utilisée que dans le prêt de rappel (et à l'intérieur d'autres objets). Vous ne pouvez pas faire référence à l'extérieur.Dans votre deuxième exemple, la fonction
my_func()
est globale pour le document et accessible de n'importe où.Je reconnais que c'est peut-être une personne simple explication 🙂
OriginalL'auteur Didier Ghys
Si vous définissez votre fonction au sein d'un rappel, vous pouvez utiliser seulement à l'intérieur de ce rappel:
OriginalL'auteur Sgoettschkes
Votre premier extrait de code ne fonctionne pas, parce que dans la fonction
my_func111
est défini dans l'étendue locale d'une fonction anonyme passé comme un argument dans votre$(document).ready
appel.Vous pouvez corriger votre code en plaçant la définition de la fonction du document à la portée et de l'appeler à l'intérieur de la fonction, prête tels que:
Bien onclick="my_func()"?
Maintenant, prenez votre temps pour lire vos réponses avec de la patience. Ils contiennent déjà toutes les informations dont vous avez besoin pour comprendre et répondre à votre problème!
j'ai essayé avec ur de code. la boîte d'alerte s'affiche dès que le chargement de la page. en cliquant sur n'est pas nécessaire.
Bien évident, si vous ne voulez pas que l'alerte s'affiche onload, puis retirez le my_func() appel à partir de $(document).est-il prêt? Ce que ce que je vais y aller avec ma réponse. Je vais laisser le reste pour vous à la figure!
OriginalL'auteur jsalonen
Je suppose que par "ça ne marche pas", tu veux dire qu'il est dit "my_func n'est pas défini" ou similaire?
Lorsque vous définissez une fonction dans une fonction, la fonction interne n'est pas visible à l'extérieur de l'extérieur de la fonction (à moins que c'est la partie externe de la fonction de l'instruction de retour).
Vous aurez besoin d'apprendre au sujet de fermetures, un bon tutoriel sur ce qui peut être trouvé ici.
désolé, je me suis trompé dans mon précédent commentaire sur l'u. ne dit pas n'importe quoi.
OriginalL'auteur majelbstoat
Vous allez ajouter une variable globale
isReady
. Le$(document).ready
rappel de l'article va changer àtrue
.À la fois votre fonction et le
isReady
variable doit être définie en dehors de la fonction de rappel de la$(document).ready
, de sorte qu'ils peuvent être vus de l'extérieur de la portée de la fonction de rappel.Votre code HTML nécessite pas de modifications. - J'ai changé les noms à utiliser JS et HTML conventions, mais essentiellement, c'est la même chose que ce que vous a écrit à l'origine...
J'
Comme une note de côté: La plus récente de JQuery utilise
$(function(){
un raccourci pour$(document).ready(function(){
pour rendre les choses plus facile pour vous.OriginalL'auteur pashute