web-dev-qa-db-fra.com

Pourquoi le gestionnaire d'événements Click se déclenche-t-il immédiatement lors du chargement de la page?

Je joue avec une fonction que je veux lier à tous les liens. À l'heure actuelle, la fonction se déclenche lorsque la page se charge, plutôt que lorsque je clique sur le lien.

Voici mon code. (Je peux poster la fonction showDiv(), si vous avez besoin de la voir.) Pouvez-vous dire si je fais quelque chose de mal ou de stupide ici?

$(document).ready(function(){

    $('a.test').bind("click", showDiv());

});

Merci!

38
Jeff

Vous souhaitez passer un référence à une fonction en tant que rappel, et non le résultat de l'exécution de la fonction:

showDiv() renvoie une certaine valeur; si aucune instruction return n'a été utilisée, undefined est renvoyée.

showDiv est une référence à la fonction qui doit être exécutée.

Cela devrait fonctionner:

$(document).ready(function(){
    $('a.test').bind("click", showDiv);
});

Alternativement, vous pouvez utiliser une fonction anonyme pour effectuer une fonction plus avancée:

...bind('click', function(){
  foo.showDiv(a,b,c);
  ...more code...
});

Dans certaines circonstances, vous pouvez vouloir utiliser la valeur renvoyée par une fonction comme rappel:

function function foo(which)
{
  function bar()
  {
    console.log('so very true');
  }
  function baz()
  {
    console.log('no way!');
  }
  return which ? bar : baz;
}

...click( foo( fizz ) );

Dans cet exemple, foo est évalué à l'aide de fizz et renvoie une fonction qui sera affectée en tant que rappel pour l'événement click.

63
zzzzBov

On dirait que vous appelez directement la fonction showDiv (et que vous liez le résultat de retour de showDiv () au gestionnaire de clics au lieu de le lier directement.

Tu veux quelque chose comme

$(document).ready(function() { $('a.test').bind("click", showDiv); });
5
tjarratt

Utilisez la ligne ci-dessous. showDiv() appellera la fonction immédiatement lorsque cette ligne sera exécutée.

$('a.test').bind("click", showDiv);
4
ShankarSangoli

Changez-le en: $('a.test').bind("click", showDiv); (ne mettez pas de parens autour de showDiv car vous voulez passer la référence de la fonction).

3
Mrchief