С 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);
field
в вашем коде содержит объект события. В вашей функции используйте $(this)
вместо.
Также обратите внимание, что вы можете упростить этот код как однострочную с анонимной функцией:
$('#fields input').click(function () { saveArray[$(this).attr('id')] = $(this).val(); });