Как использовать функцию, которая принимает аргументы с помощью метода jQuery change()?
Я использую jQuery версии 1.5.
Я смотрю на функцию jQuery change()
и конкретно в этом бите:
.change( [ eventData ], handler(eventObject) )
eventData: A map of data that will be passed to the event handler.
handler(eventObject): A function to execute each time the event is triggered.
Что такое "карта данных" в JavaScript? Как использовать следующую тестовую функцию в качестве обработчика событий?
var myHandler = function(msg){alert(msg);};
Я пробовал это:
$("select#test").change(["ok"], myHandler);
и отчеты о предупреждении [object Object]
Ответы
Ответ 1
См. event.data
. Данные не передаются как аргумент обработчику, а как свойство объекта события:
$("select#test").change({msg: "ok"}, function(event) {
alert(event.data.msg);
});
Обработчик всегда принимает только один аргумент, который является объектом event
. Вот почему ваше предупреждение показывает "[object Object]"
, ваша функция печатает объект события.
Если вы хотите использовать функции с настраиваемыми аргументами, вы должны обернуть их в другую функцию:
$("select#test").change({msg: "ok"}, function(event) {
myHandler(event.data.msg);
});
или просто
$("select#test").change(function(event) {
myHandler("ok");
});
Btw. селектор лучше записывается как $('#test')
. Идентификаторы (должны быть) уникальны. Нет необходимости добавлять имя тега.
Ответ 2
Что такое "карта данных" в Javascript?
В основном просто объект, например:
var data = {
foo: "I'm foo",
bar: "I'm bar"
};
Все объекты JavaScript являются по существу картами (ака "словари" или "ассоциативные массивы" ).
Как я могу использовать следующую тестовую функцию как обработчик событий?
Обернув его в другую функцию:
$("select#test").change(function() {
myHandler($(this).val());
});
Это вызывает myHandler
со значением поля выбора при каждом изменении.
Если вы хотите использовать часть eventData
, добавьте объект перед обработчиком:
$("select#test").change({
foo: "I'm foo"
}, function(event) {
myHandler(event.data.foo, $(this).val());
});
Это вызывает myHandler
с "I'm foo" в качестве первого аргумента, а затем значение поля выбора при каждом изменении.