jQuery ' s.click - przekaż parametry do funkcji użytkownika

Próbuję wywołać funkcję z parametrami używając jQuery .klik, ale nie mogę go uruchomić.

Tak chcę, żeby to działało:

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

Które wywołują

function add_event(event) {
    blah blah blah }

Działa, jeśli nie używam parametrów, jak to:

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

Ale muszę być w stanie przekazać parametr do mojej add_event funkcji.

Jak mogę zrobić tę konkretną rzecz?

Wiem, że mogę używać .click(function() { blah }, ale wywołuję funkcję add_event z wielu miejsc i chcę to zrobić w ten sposób.

Author: Peter Mortensen, 2010-07-17

7 answers

Dla dokładności natknąłem się na inne rozwiązanie, które było częścią funkcjonalności wprowadzonej w wersji 1.4.3 jQuery click event handler.

Pozwala na przekazanie Mapy danych do obiektu event, który jest automatycznie przesyłany z powrotem do funkcji obsługi zdarzeń przez jQuery jako pierwszy parametr. Mapa danych byłaby przekazywana do funkcji .click() jako pierwszy parametr, a następnie do funkcji obsługi zdarzeń.

Oto jakiś kod do zilustrowania tego, co ja średnia:

// 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);
}

Wiem, że jest już za późno na to pytanie, ale poprzednie odpowiedzi doprowadziły mnie do tego rozwiązania, więc mam nadzieję, że kiedyś komuś pomoże!

 524
Author: Chris Kempen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 15:00:38

Musisz użyć funkcji anonimowej, takiej jak ta:

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

Możesz wywołać ją tak, jak w przykładzie, po prostu nazwę funkcji BEZ parametrów, jak to:

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

Ale metoda add_event nie otrzyma 'shot' jako parametru, ale cokolwiek click przejdzie do wywołania zwrotnego, czyli obiektu event itself...so Nie dotyczy w tym przypadku , ale działa dla wielu innych. Jeśli chcesz przekazać parametry, użyj funkcji anonimowej...albo jest jedna Inna opcja, Użyj .bind() i przekazać dane, Tak:

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

I dostęp do niego w add_event, Tak:

function add_event(event) {
  //event.data.param == "shot", use as needed
}
 79
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 21:29:38

Jeśli tak to nazwiesz...

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

...musisz mieć add_event() return a function, like...

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

Funkcja jest zwracana i używana jako argument dla .click().

 36
Author: user113716,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 21:45:03

Udało mi się użyć .on () like so:

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

Następnie wewnątrz funkcji add_event uzyskujesz dostęp do' shot ' w następujący sposób:

event.data.event_type

Zobacz .w dokumentacji () aby uzyskać więcej informacji, podajemy następujący przykład:

function myHandler( event ) {
  alert( event.data.foo );
}
$( "p" ).on( "click", { foo: "bar" }, myHandler );
 29
Author: Gravity Grave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 20:27:34

Tak, to jest stary post. Niezależnie od tego, ktoś może uznać to za przydatne. Oto inny sposób wysyłania parametrów do programów obsługi zdarzeń.

//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});
 11
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-28 22:11:19
      $imgReload.data('self', $self);
            $imgReload.click(function (e) {
                var $p = $(this).data('self');
                $p._reloadTable();
            });

Ustaw obiekt javaScript na element onclick:

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

Get Object from "this" element:

 var $p = $(this).data('self');
 6
Author: Vladimir Novick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 08:00:40

Dostaję proste rozwiązanie:

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

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

Chodzi mi o to, że przekazuję wartość onclick event do javascript function sendData(), inicjalizuję zmienną i odbieram ją metodą obsługi zdarzeń jQuery.

Jest to możliwe, ponieważ na początku sendData(valueid) zostanie wywołana i zainicjalizowana wartość. Następnie po zdarzeniu jQuery get jest wykonywany i używa tej wartości.

Jest to rozwiązanie proste, a dla rozwiązania szczegółowego przejdź tutaj .

 5
Author: susan097,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 12:34:13