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 ?
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.
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);
}
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); };
}
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
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ę.
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).
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