les paramètres.click - pass de jQuery à la fonction Utilisateur

J'essaie d'appeler une fonction avec des paramètres en utilisant jQuery.cliquez, mais je ne peux 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 passer 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 endroits et je veux le faire ceci façon.

245
demandé sur Peter Mortensen 2010-07-18 01:27:39

7 réponses

Pour plus de rigueur, je suis tombé sur une autre solution qui faisait partie de la fonctionnalité introduite dans la version 1.4.3 du gestionnaire d'événements jQuery click.

Il vous permet de passer une carte de données à l'objet d'événement qui est automatiquement renvoyé à la fonction de gestionnaire d'événements par jQuery en tant que premier paramètre. La carte 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 moyenne:

// 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 un jour!

449
répondu Chris Kempen 2012-02-27 15:00:38

, Vous devez utiliser une fonction anonyme comme ceci:

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

, Vous pouvez l'appeler comme vous avez dans l'exemple, il suffit d'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 passe à son callback, qui est l'objet event itself...so ce n'est pas applicable dans ce cas , mais fonctionne pour beaucoup d'autres. Si vous devez passer des paramètres, utilisez une fonction anonyme...ou, il y a un autres option, utilisez .bind() et passer des données, comme ceci:

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

Et y accéder dans add_event, comme ceci:

function add_event(event) {
  //event.data.param == "shot", use as needed
}
71
répondu Nick Craver 2010-07-17 21:29:38

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

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

...vous devriez avoir add_event() retourner une fonction, comme...

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

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

32
répondu user113716 2010-07-17 21:45:03

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

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

Ensuite, à l'intérieur de la fonction add_event, vous avez accès à 'shot' comme ceci:

event.data.event_type

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

function myHandler( event ) {
  alert( event.data.foo );
}
$( "p" ).on( "click", { foo: "bar" }, myHandler );
19
répondu Gravity Grave 2015-06-07 20:27:34

Oui, Ceci est un ancien poste. Quoi qu'il en soit, quelqu'un peut le trouver utile. Voici une autre façon 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});
7
répondu Kevin 2014-05-28 22:11:19
      $imgReload.data('self', $self);
            $imgReload.click(function (e) {
                var $p = $(this).data('self');
                $p._reloadTable();
            });

Définissez l'objet javaScript sur onclick element:

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

Récupère L'objet de " cet " élément:

 var $p = $(this).data('self');
5
répondu Vladimir Novick 2014-02-27 08:00:40

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 que passer la valeur onclick événement à la javascript function sendData(), initialiser à la variable et le prendre par la méthode jQuery event handler.

C'est possible car au début sendData(valueid) est appelé et initialise la valeur. Ensuite, après l'événement jQuery, get est exécuté et utilise cette valeur.

C'est la solution simple et pour la solution détaillée, allez ici.

0
répondu Sushant 2018-08-13 12:34:13