web-dev-qa-db-fra.com

comment créer et appeler une fonction personnalisée dans jQuery

J'ai besoin de créer une fonction simple dans jQuery qui appellera d'autres fonctions

$(document).ready(function() {
  function reload_cart() {
    alert('reload cart called');
  }
});
$(document).ready(function() {
  reload_cart(); //i need to call from here.
});
$(document).ready(function() {
  $('a.add_to_cart').live('click', function (e) {
    reload_cart(); //i need to call from here.
  });
});

L'erreur que j'obtiens dans firebug: reload_cart() is not defined.

17
user1911703

reload_cart Est local à votre premier rappel $(document).ready(). Vous ne pouvez pas l'appeler depuis une portée extérieure.

Vous devez fusionner vos fonctions ensemble:

$(document).ready(function() {
    function reload_cart() {
        alert('reload cart called');
    }

    reload_cart();

    $('a.add_to_cart').live('click', function(e) {
        reload_cart();
    });
});

Une solution encore meilleure serait de créer un objet cart, d'ajouter reload à son prototype et de l'initialiser en dehors de tous les rappels.

29
Blender

Oui, car vous avez déclaré la fonction dans la portée de la première $(document).ready(function(){}) afin qu'elle ne soit pas disponible en dehors de cette portée de fonction.

Je ne sais pas pourquoi vous appelleriez $(document).ready() plus d'une fois. Essaye ça:

$(document).ready(function(){
   function reload_cart() {
       alert('reload cart called');
   }

   reload_cart(); //i need to call from here.


   $('a.add_to_cart').live('click', function(e) {
       reload_cart(); //i need to call from here.
   });
});

Alternativement, vous pouvez également déclarer votre fonction en dehors de $(document).ready() et elle sera disponible dans le monde entier.

8
ced-b

Mettez votre définition de fonction:

function reload_cart() {
    alert('reload cart called');
}

Document extérieur prêt.

Actuellement, sa portée dans le gestionnaire document.ready uniquement.

$(document).ready(function(){
//reload_cart is only available here
    function reload_cart() {
        alert('reload cart called');
    }
});
6
Akhil Sekharan