Подтвердить что ты не робот

Как использовать функцию, которая принимает аргументы с помощью метода 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]

4b9b3361

Ответ 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" в качестве первого аргумента, а затем значение поля выбора при каждом изменении.