56 votes

Passer des paramètres aux événements click() et bind() en jQuery ?

Je veux passer quelques paramètres à click() dans jQuery, j'ai essayé ce qui suit mais cela ne fonctionne pas :

commentbtn.click(function(id, name){
    alert(id);
});

Et aussi si nous utilisons le bind alors comment nous allons le faire :

commentbtn.bind('click', function(id, name){
    alert(id);
});

3 votes

Quels sont les id y name . D'où les obtenez-vous ? S'agit-il de valeurs au moment du clic ou de quelque chose d'initialisé au moment de la liaison ? Comment le clic saura-t-il ce qu'il doit passer dans la fonction ? Il transmettra toujours l'objet événement et rien d'autre.

1 votes

Ils sont initialisés, avant de lier l'événement.

1 votes

Eh bien, comme david suggéré dans sa réponse, vous devrez soit les conserver comme variables de premier niveau, soit créer une fermeture. click ne sait pas ce que vous voulez veulent à passer dans le gestionnaire.

127voto

Anurag Points 66470

Voir données de l'événement

commentbtn.bind('click', { id: '12', name: 'Chuck Norris' }, function(event) {
    var data = event.data;
    alert(data.id);
    alert(data.name);
});

Si vos données sont initialisées avant de lier l'événement, il suffit de capturer ces variables dans une fermeture.

// assuming id and name are defined in this scope
commentBtn.click(function() {
    alert(id), alert(name);
});

1 votes

+1 Pour la partie "si les données sont déjà initialisées", c'est ce que je cherchais ! :)

0 votes

C'est absolument génial !

1 votes

La documentation de jQuery pour la méthode .click() indique cette possibilité mais ne donne aucun exemple de son utilisation. Mais, si vous recherchez 'event.data' [ [api.jquery.com/event.data/]](https://api.jquery.com/event.data/]) Vous y trouverez un exemple. Consultez également Event Object : api.jquery.com/category/events/event-object

19voto

David Hedlund Points 66192

D'où tirez-vous ces valeurs ? Si elles proviennent du bouton lui-même, vous pourriez simplement faire

commentbtn.click(function() {
   alert(this.id);
});

S'il s'agit d'une variable dans le champ d'application de la liaison, vous pouvez y accéder à partir de sans

var id = 1;
commentbtn.click(function() {
   alert(id);
});

S'il s'agit d'une variable dans la portée de la liaison, cela pourrait changement avant que le clic ne soit appelé, vous devrez créer une nouvelle fermeture

for(var i = 0; i < 5; i++) {
   $('#button'+i).click((function(id) {
      return function() {
         alert(id);
      };
   }(i)));
}

0 votes

J'étais confus par le cas où la variable est changée quand le clic est appelé. Merci pour celui-ci !

0voto

Haroldo Macedo Points 403

Une alternative à la méthode bind().

Utilisez la méthode click(), faites quelque chose comme ceci :

commentbtn.click({id: 10, name: "João"}, onClickCommentBtn);

function onClickCommentBtn(event)
{
  alert("Id=" + event.data.id + ", Name = " + event.data.name);
}

Ou, si vous préférez :

commentbtn.click({id: 10, name: "João"},  function (event) {
  alert("Id=" + event.data.id + ", Nome = " + event.data.name);
});

Il affichera une boîte d'alerte avec les informations suivantes :

Id = 10, Name = João

-1voto

Jakub Konecki Points 28852
var someParam = xxxxxxx;

commentbtn.click(function(){

    alert(someParam );
});

0 votes

Je veux les passer dans l'événement.

0 votes

@Prashant : Pouvez-vous donner un exemple à ce sujet ?

0 votes

@Prashant - vous ne pouvez pas simplement "ajouter" plus de paramètres à votre callback ! jQuery ne saura pas où obtenir les valeurs de...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X