Ответ 1
var myFunction = $("#foo").data("say");
myFunction(someParameter);
Документация jQuery . data() сообщает следующее:
The .data() method allows us to attach data of any type to DOM element
Я предполагаю, что "любой тип" относится и к функциям. Скажем, у меня есть div с id foo как таковым:
<div id="foo">Foo!</div>
И я хотел бы сохранить в нем функцию под названием say
, которая принимает параметр.
Согласно документации, я сохранил функцию следующим образом:
$("#foo").data("say", function(message){
alert("Foo says "+message);
});
Мой вопрос: как мне вызвать функцию с параметром, когда я этого хочу сделать.
$("#foo").data("say");
должен возвращать функцию, но как бы передать ей параметр?
Спасибо!
var myFunction = $("#foo").data("say");
myFunction(someParameter);
Лучшей альтернативой хранению функций в data
является использование пользовательских событий. Это можно легко сделать с помощью on
и trigger
:
$('#foo').on('say', function(e, arg){
alert('Foo says ' + arg);
});
$('#foo').trigger('say', 'hello');
Пример: http://jsfiddle.net/tW66j/
Примечание: в предыдущих версиях jQuery (до 1.7) вместо .on
использовался .bind
.
Здесь более элегантный способ вызова метода.
// store the method with data
$('#foo').data('bar',function(){console.log("Givin it the business!")});
// Simple execution (this will not keep the method in scope)
$('#foo').data('bar')();
// scoped method execution with call([scope,arguments[]]), takes arguments with comma separation
$('#foo').data('bar').call($('#foo').first()[0],'arguemnts','for','method');
// scoped method execution with apply(scope[,argument[]]), takes an array of arguments
$('#foo').data('bar').apply($('#foo').first()[0],['arguemnts','for','method']);
Применить метод: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply
Метод вызова: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call