web-dev-qa-db-fra.com

jQuery .click - passe les paramètres à la fonction utilisateur

J'essaie d'appeler une fonction avec des paramètres à l'aide du fichier .Click de jQuery, mais je ne parviens pas à le faire fonctionner.

Voici comment je veux que cela fonctionne:

$('.leadtoscore').click(add_event('shot'));

qui appelle

function add_event(event) {
    blah blah blah }

Cela fonctionne si je n'utilise pas de paramètres, comme ceci:

$('.leadtoscore').click(add_event);
function add_event() {
    blah blah blah }

Mais je dois pouvoir transmettre un paramètre à ma fonction add_event.

Comment puis-je faire cette chose spécifique?

Je sais que je peux utiliser .click(function() { blah }, mais j'appelle la fonction add_event à partir de plusieurs emplacements et je souhaite le faire de cette façon.

271
Paul Hoffer

Par souci de rigueur, je suis tombé sur une autre solution faisant partie de la fonctionnalité introduite dans la version 1.4.3 de jQuery click event handler.

Il vous permet de transmettre un mappage de données à l'objet événement qui est automatiquement renvoyé à la fonction de gestionnaire d'événements par jQuery en tant que premier paramètre. La mappe de données serait transmise à la fonction .click() en tant que premier paramètre, suivie de la fonction de gestionnaire d'événements.

Voici un code pour illustrer ce que je veux dire:

// say your selector and click handler looks something like this...
$("some selector").click({param1: "Hello", param2: "World"}, cool_function);

// in your function, just grab the event object and go crazy...
function cool_function(event){
    alert(event.data.param1);
    alert(event.data.param2);
}

Je sais qu'il est tard dans le jeu pour cette question, mais les réponses précédentes m'ont conduit à cette solution, alors j'espère que cela aidera quelqu'un de temps en temps!

488
Chris Kempen

Vous devez utiliser une fonction anonyme comme celle-ci:

$('.leadtoscore').click(function() {
  add_event('shot')
});

Vous pouvez l'appeler comme dans l'exemple, juste un nom de fonction sans paramètres, comme ceci:

$('.leadtoscore').click(add_event);

Mais la méthode add_event n'obtiendra pas 'shot' en tant que paramètre, mais plutôt tout ce que click lui transmettra, ce qui correspond à l'objet event lui-même ... ce n'est donc pas applicable dans ce cas , mais fonctionne pour beaucoup d'autres. Si vous avez besoin de passer des paramètres, utilisez une fonction anonyme ... ou, il y a une autre option , utilisez .bind() et passez données, comme ceci:

$('.leadtoscore').bind('click', { param: 'shot' }, add_event);

Et accédez-y dans add_event, comme ceci:

function add_event(event) {
  //event.data.param == "shot", use as needed
}
77
Nick Craver

Si vous appelez ça comme vous l'aviez ...

$('.leadtoscore').click(add_event('shot'));

... vous auriez besoin que add_event() renvoie une fonction, comme ...

function add_event(param) {
    return function() {
                // your code that does something with param
                alert( param );
           };
}

La fonction est renvoyée et utilisée comme argument pour .click().

35
user113716

J'ai eu du succès en utilisant .on () comme ceci:

$('.leadtoscore').on('click', {event_type: 'shot'}, add_event);

Ensuite, dans la fonction add_event, vous avez accès à 'shot' comme ceci:

event.data.event_type

Voir la documentation . On () pour plus d'informations, où ils fournissent l'exemple suivant:

function myHandler( event ) {
  alert( event.data.foo );
}
$( "p" ).on( "click", { foo: "bar" }, myHandler );
23
Gravity Grave

Oui, c'est un ancien post. Quoi qu'il en soit, quelqu'un peut trouver cela utile. Voici un autre moyen d’envoyer des paramètres aux gestionnaires d’événements.

//click handler
function add_event(event, paramA, paramB)
{
    //do something with your parameters
    alert(paramA ? 'paramA:' + paramA : '' + paramB ? '  paramB:' + paramB : '');
}

//bind handler to click event
$('.leadtoscore').click(add_event);
...
//once you've processed some data and know your parameters, trigger a click event.
//In this case, we will send 'myfirst' and 'mysecond' as parameters
$('.leadtoscore').trigger('click', {'myfirst', 'mysecond'});

//or use variables
var a = 'first',
    b = 'second';

$('.leadtoscore').trigger('click', {a, b});
$('.leadtoscore').trigger('click', {a});
10
Kevin
      $imgReload.data('self', $self);
            $imgReload.click(function (e) {
                var $p = $(this).data('self');
                $p._reloadTable();
            });

Définissez l'objet javaScript sur l'élément onclick:

 $imgReload.data('self', $self);

obtenir Object à partir de "cet" élément:

 var $p = $(this).data('self');
5
Vladimir Novick

Je reçois la solution simple:

 <button id="btn1" onclick="sendData(20)">ClickMe</button>

<script>
   var id; // global variable
   function sendData(valueId){
     id = valueId;
   }
   $("#btn1").click(function(){
        alert(id);
     });
</script>

Ma moyenne est de passer la valeur événement onclick à la fonction javascript function sendData(), de l'initialiser à la variable et de la prendre avec la méthode du gestionnaire d'événements jQuery.

Cela est possible car _ sendData(valueid) est d'abord appelé et initialise la valeur. Ensuite, après l'événement jquery, celui-ci est exécuté et utilise cette valeur.

C'est la solution la plus simple et la solution For Detail go Here .

2
susan097