使用 jQuery,如何用一个参数正确注册一个 "onchange" 回调?



考虑注册onchange回调的示例:

function appendToSaveArray(field)
{
    saveArray[field.attr("id")] = field.attr("value");
}
$('#fields input').change(appendToSaveArray);

这个想法是将对几个文本输入的最后一次更改存储在一个数组中。当我更改其中一个输入的值(然后将焦点切换到文档的另一个元素)时,就会调用函数appendToSaveArray。但是,参数field不包含触发更改的输入元素,这是我所期望的。如何从函数appendToSaveArray中找出触发事件的输入?

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(); });

相关内容

最新更新