С jQuery, как правильно зарегистрировать обратный вызов onchange с одним аргументом?

Рассмотрим пример регистрации обратных вызовов onchange:

function appendToSaveArray(field)
{
    saveArray[field.attr("id")] = field.attr("value");
}

$('#fields input').change(appendToSaveArray);

Идея заключается в сохранении последнего изменения, внесенного в несколько текстовых вводов в массиве. Когда я изменяю значение одного из входов (а затем переключаю фокус на другой элемент документа), функция appendToSaveArray называется. Тем не менее, аргумент field не содержит элемент ввода, где изменение было вызвано, что я ожидал. Как я могу узнать из функции appendToSaveArrayКакой вход вызвал событие?

3 ответа

Решение

Внутри change обработчик события, this относится к входу, для которого было инициировано событие. Вы можете получить его значение напрямую с this.value:

function appendToSaveArray()
{
    saveArray[this.id] = this.value;
}

$('#fields input').change(appendToSaveArray);

ДЕМО.

field равно событию, которое также хранит цель события, т.е. элемент изменился:

function appendToSaveArray(field) {
    saveArray[field.target.id] = field.target.value;
}

$('#fields input').on('change', appendToSaveArray);​

FIDDLE

fieldв вашем коде содержит объект события. В вашей функции используйте $(this)вместо.

Также обратите внимание, что вы можете упростить этот код как однострочную с анонимной функцией:

$('#fields input').click(function () { saveArray[$(this).attr('id')] = $(this).val(); });
Другие вопросы по тегам