jQuery.metoda on () - przekazanie argumentu do funkcji obsługi zdarzeń

Mam następujący skrypt, który nie działa

<script type="text/javascript" >

   function ADS(e){ alert(e); }

   $(document).ready(function(){
          $(document).on("dblclick","#an_tnam tr", ADS('hello'));
          $(document).on("dblclick","#kv_tnam tr", ADS('world'));
          // ....  
 });

</script>

Jak mogę przekazać argument do funkcji obsługi zdarzeń ADS ?

Author: Paramore, 2013-04-09

6 answers

Funkcja .on() oczekuje przekazania referencji do funkcji ; to, co robisz, to wywołanie funkcji i przekazanie jej zwracanej wartości. Jeśli chcesz przekazać parametr, musisz zawinąć wywołanie w funkcję anonimową.

$(document).on('dblclick', '#an_tnam tr', function(event) {
    ADS('hello');
});

JQuery zawsze przekazuje swój znormalizowany obiekt zdarzenia jako pierwszy argument do wykonywanej funkcji.

 48
Author: Anthony Grist,
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
2013-04-09 14:12:19

Możesz przekazać dodatkowe dane do funkcji obsługi zdarzeń i mogą być dostępne za pomocą event.data wewnątrz funkcji obsługi.

$(document).on('dblclick', '#an_tnam tr', { extra : 'random string' }, function(event)
{
    var data = event.data;

    // Prints 'random string' to the console
    console.log(data.extra);
}

Możesz również wysłać dodatkowe dane do dowolnego zdarzenia, które chcesz wywołać ze źródła zewnętrznego przy użyciu metody .trigger()

$('#an_tnam tr').trigger('click', [{ extra : 'random string' }]);

Różnica w przekazywaniu danych do metody trigger polega na tym, że oczekuje ona, że funkcja obsługi pobierze dodatkowe argumenty o długości przekazywanej tablicy. Powyższe wymagałoby, aby handler miał JEDEN dodatkowy argument zawierający obiekt przeszedł.

$('#an_tnam tr').on('click', function(event, obj)
{
   // Prints 'random string' to the console
   console.log(obj.extra);
}
 92
Author: David Barker,
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
2016-03-16 09:42:29

Jak zauważył Anthony Grist, metoda .on() oczekuje referencji funkcji w tej części; oceniasz funkcję, która nie zwraca NIC (null).

Jednak jedną z ciekawych cech JavaScript jest to, że wszystko jest obiektem, łącznie z funkcjami. Dzięki małej modyfikacji możesz zmienić ADS(), aby zwracać obiekt funkcji anonimowej:

function ADS(e){ 
    return function(){ alert(e); };
}

Http://jsfiddle.net/cSbWb/

 5
Author: Blazemonger,
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
2017-05-23 12:18:24

Właściwie, istnieje bardzo prosty sposób, aby to osiągnąć, bez dodatkowego bałaganu i bez funkcji anonimowych, używając js bind():

$(document).on('dblclick', ADS.bind(null, 'hello'));

Pierwszy parametr jest wartością, którą chcesz" this " mieć wewnątrz funkcji wywołania zwrotnego.

Więcej informacji w Mozilla Developer Network: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

 5
Author: Ignacio Segura,
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
2016-02-19 16:30:02
function ADS(e){ alert(e); }

$(document).ready(function(){
          $(document).on("dblclick","#an_tnam tr", function (e) { ADS('hello') });

 });

Da radę.

 3
Author: akluth,
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
2013-04-09 14:11:51
function ADS(e) {
    return function() {
        alert(e);
    };
}

Like that when you ' re doing

$(document).on("dblclick","#an_tnam tr", ADS('hello'));

, jest to zwracana funkcja, która jest przypisana jako funkcja obsługi zdarzenia(a twój argument Łańcuchowy jest przekazywany podczas przypisywania funkcji obsługi, a nie podczas jej wywoływania).

 3
Author: Paulloz,
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
2013-04-09 14:14:55