В javascript вы не используете массив для именованных ключей. Вы бы использовали объект вместо этого. Я предполагаю, что значения должны быть самими элементами.
var result = {};
$.each(this.form.elements, function() {
result[ this.name ] = this;
});
Что касается вашего обновления, эта строка:
var matches1 = that.toArray();
... не работает, потому что вы вызываете jQuery toArray()
для объекта jQuery.
Если вы хотите использовать это, вы вызовете его из библиотеки и передадите ему объект jQuery.
var matches1 = $.toArray( that );
... хотя я не знаю, почему вы хотите превратить объект jQuery, представляющий все элементы <input>
, в массив при каждом событии change
.
Эта строка:
var matches2 = this.form.elements; // this works.
... работает, потому что это просто ссылка на элементы формы из элемента <input>
, который получил событие. Он использует собственные свойства API DOM для получения коллекции (технически это не массив).
Пришлось отредактировать мой ответ, потому что я ошибался насчет использования toArray()
. Я думал о makeArray()
. Метод toArray()
является оберткой для .get()
и делает то же самое.