2

考虑这个注册 onchange 回调的例子:

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

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

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

4

3 回答 3

3

change事件处理程序内部,this指的是为其触发事件的输入。您可以通过以下方式直接获取其值this.value

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

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

演示

于 2012-08-25T15:26:28.940 回答
1

field,在您的代码中,包含事件对象。在您的功能中,请$(this)改用。

另请注意,您可以将此代码简化为带有匿名函数的单行代码:

$('#fields input').click(function () { saveArray[$(this).attr('id')] = $(this).val(); });
于 2012-08-25T15:27:34.910 回答
1

field等于事件,它也存储了事件目标,即。元素改变了:

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

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

小提琴

于 2012-08-25T15:30:26.203 回答