2009-10-13 14 views
3

J'ai le code suivant .... Lorsque la page est chargée myFunc() est appelée même si je ne clique pas dans mon div. Pourquoi? La fonction déclarée "en ligne" ne se déclenche pas ... hmmmm ........Pourquoi jQuery click-event est-il déclenché lors du chargement de la page?

<div id="map" style="background: green; height: 100px"></div> 

<script type="text/javascript"> 
    function myFunc() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc()); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script> 

Répondre

10

En raison de votre code:

$("#map").click(myFunc()); 

est faux et doit être:

$("#map").click(myFunc); 

Votre code appellerait myFunc() d'abord et que simuler un événement onclick.

Comme on le voit dans la documentation:

Ce que vous avez fait est la suivante: (comme myFunc retourne null)

click()

déclenche l'événement clic de chaque élément adapté. Provoque l'exécution de toutes les fonctions qui ont été liées à cet événement click. Pour déclencher l'événement click sur tous les paragraphes de la page: $ ("p"). Click();

Ce que vous voulez est ceci:

click (fn) Associe une fonction à l'événement clic de chaque élément adapté. L'événement click se déclenche lorsque le bouton du périphérique de pointage est cliqué sur un élément. Un clic est défini comme un mousedown et un mouseup sur le même emplacement d'écran. La séquence de ces événements est:

+0

Merci beaucoup .... –

1

devrait être

$("#map").click(myFunc); 

De cette façon, vous donnez la fonction en tant que paramètre. $("#map").click(myFunc()); a déclenché la fonction, et donne son résultat en tant que paramètre.

1

Vous appelez votre fonction dans votre gestionnaire d'événements click. Pour ce faire, à la place:

<script type="text/javascript"> 
    function myFunc() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script> 

Vous passez uniquement le nom de la fonction, sans parenthèses, en passant comme un argument à un gestionnaire d'événements (ou toute autre fonction).

0
$("#map").click(myFunc); 

PAS

$("#map").click(myFunc()); 
3

Avec le myFunc() en $("#map").click(myFunc()) vous appelez les références de fonction par myFunc et que sa valeur de retour est passé à $("#map").click.Si vous voulez passer la même fonction myFunc, laissez la parenthèse loin et utiliser uniquement le nom de la fonction:

$("#map").click(myFunc); 
+0

Bonne description de l'erreur. Je peux ajouter que les fonctions qui devraient être passées aux fonctions, devraient être déclarées comme: var MyFunc = function() {...}. Cependant, la plupart des navigateurs (tous?) Acceptent toujours la déclaration standard (fonction MyFunc() ...). –

+1

@ Björn: Votre déclaration de fonction n'est pas fausse. Vous passez simplement la mauvaise valeur à '$ (" # map "). Click' puisque' myFunc() 'appellera les références de fonction par' myFunc' et alors seulement sa valeur de retour sera passée à '$ (" # carte "). click'. – Gumbo

+0

Hu? Ma déclaration? Je ne passe rien à JQuery, je finis souvent par utiliser Mootools;) Je pense que vous me confondez avec l'OP. Je viens de donner un conseil pour déclarer la fonction d'une manière appropriée pour le passer en paramètre à d'autres fonctions ... –

0

devrait être

$("#map").click(myFunc); 

et non

$("#map").click(myFunc()); 

passant myFunc() au lieu de myFunc appelle effectivement cette fonction

0

Cela est attendu de votre code car ici:

$("#map").click(myFunc()); 

Les parenthèses() après la fonction provoquent l'appel.

Essayez ceci:

<script type="text/javascript"> 
    var myFunc = function() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script>