web-dev-qa-db-fra.com

Comment exécuter une fonction de rappel sur un déclencheur jQuery ("clic")?

J'ai besoin de déclencher un événement personnalisé dans le rappel d'un appel trigger, mais je ne peux pas le faire fonctionner.

J'ai essayé ceci:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

function runtests () {
    console.log("clicked the input");
};
$input.trigger('click', runtests()); 

et ça:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
$input.trigger('click', function(){
    console.log("clicked the input");
}

Aucun des deux ne fonctionne.

Question:
Comment puis-je exécuter une fonction de rappel lorsque je déclenche un clic sur un élément?

28
frequent

Lorsque vous appelez trigger, le gestionnaire d'événements lié est immédiatement exécuté, vous n'avez donc pas besoin de rappel. Utilisez simplement

$input.trigger('click');
runtests();
24
Denys Séguret

Oui - Il est vrai que le déclencheur ne prend pas de rappel mais nous pouvons passer le rappel en paramètre.

//.trigger( eventType [, extraParameters ] )

$("#element").bind("customCall", function(e, callback){
   callback();
}
var callback = function(){alert("Hello");}
$("#element").trigger("customCall",[callback]);

J'espère que cela vous aidera

18
Naren Chejara

Vous devez d'abord lier l'événement click, puis vous pouvez déclencher l'événement click.

$input.bind('click', function() {

     console.log("clicked the input");
});

$input.trigger('click');
11
Mahesh Sapkal

Le déclencheur n'a pas de fonction de rappel.

.trigger( eventType [, extraParameters ] )

Official Document

Ce que vous pouvez faire

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

$input.on('click',function(){
   console.log("clicked the input");
});
5
Dipesh Parmar

Vous devez utiliser bind ou on pour ajouter des rappels. Dans votre cas, cela devrait ressembler à ceci:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

function runtests () {
    console.log("clicked the input");
};

$input.bind('click', runtests);

Une version encore plus courte pour le clic de liaison est $input.click(runtests)

Ensuite, il sera appelé au clic ou vous pouvez le déclencher manuellement avec $input.trigger('click') ou simplement $input.click().

2
FVlad

Le déclencheur n'a pas de fonction de rappel - vous pouvez mieux réécrire votre code pour utiliser la méthode . On .

$("body").on("click", "#click", function() {
   alert("Clicked!"); 
});

JSFiddle .

0
MarcoK

Si vous avez un gestionnaire de clics sur chaque entrée mais que vous voulez faire quelque chose sur un élément spécifique:

var $container = $(".ui-popup-container"),
    special = 2;

$container.on('click', 'input', function() {
    // do something for every input

    if($(this).index() == special) {
        // your "callback", e.g. the function you want to execute on input:eq2 click
        myfunction();
    }
}).find('input').eq(special).trigger('click');
0
Simon