jQuery - l'Appel d'une fonction inline
Je suis en train de passer d'une variable à une fonction jQuery inline (c'est à dire: à l'aide d'un onMouseOver="function();"
dans le lien (qui est une zone de balise à partir d'une image de la carte)).
La fonction n'est appelée que si je le place avant le $(document).ready(function(){
ligne, mais cela est à l'origine de toutes sortes de problèmes avec jQuery.
Tout ce que je veux est pour une simple balise (comme <area shape="circle" coords="357,138,17" onMouseOver="change('5');" id="5" />
pour lancer une fonction qui est contenue dans la normale jQuery corps de code.
Merci beaucoup pour toute aide que vous pouvez offrir.
Pour illustrer ce point, les travaux suivants:
<script type="text/javascript">
function myfunction(x) { alert(x); //Alerts 2
}
</script>
<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>
Mais la suite n'est pas
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
function myfunction(x) { alert(x); //Nothing happens
}
}
</script>
<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>
OriginalL'auteur Patrick Beardmore | 2009-08-22
Vous devez vous connecter pour publier un commentaire.
Dans votre deuxième exemple, vous avez déclaré
myfunction
à l'intérieur de de la fonction anonyme, vous êtes de passage à.ready()
. Cela signifie quemyfunction
est une variable locale, qui est uniquement dans la portée à l'intérieur de cette fonction anonyme, et vous ne pouvez pas appeler à partir de n'importe où ailleurs.Il y a deux solutions.
Tout d'abord, vous pouvez le déclarer à l'extérieur (avant ou après) l'appel à
.ready()
. Cette ne devrait pas causer une interférence avec jQuery. Si elle le fait, quelque chose d'autre est mauvais (peut-être une simple erreur de syntaxe?) que nous en serions très heureux de vous amener dans un StackOverflow question.Deuxièmement, vous ne devriez pas être à l'aide de
onMouseOver=""
à joindre les gestionnaires d'événements (tels que les mélanges de JavaScript avec le HTML), nous allons donc l'écarter totalement. Remplacer votre JavaScript:Et votre code HTML:
(Je suppose que vous aurez envie de le remplacer que
id
avec quelque chose de plus significatif dans le contexte, bien sûr.)En JavaScript, tout est une variable (ou à l'aide de plus de la langue traditionnelle, tout est ), y compris les fonctions. Lorsque vous écrivez
function f() { };
vous êtes essentiellement en utilisant simplement un alias pourvar f = function() { };
c'est Ce qui rend possible l'utilisation de "anonyme" des fonctions en JavaScript. Dans d'autres langues, vous pouvez écrire soitint x = 2; f(x);
ou tout simplementf(2)
. En JavaScript, car les fonctions sont données comme tout le reste, vous pouvez écrire soitvar foo = function() {}; f(foo);
ou tout simplementf(function() {});
Comprendre cela est la clé de la compréhension de JavaScript.OriginalL'auteur VoteyDisciple
Il y a deux resons pourquoi le code ne fonctionne pas. Tout d'abord il vous manque une parenthèse fermante dans l'appel à la fonction ready, si vous obtenez une erreur de syntaxe.
Deuxième, la fonction que vous définissez à l'intérieur de la fonction n'existe pas dans ce champ d'application. Lorsque vous quittez la fonction qu'il n'existe plus.
Exemple:
Vous pouvez définir la fonction à l'échelle mondiale à partir de la fonction comme ceci:
Oui, il le fera.
OriginalL'auteur Guffa