Javascript jQuery-获取以输入名称作为键的数组

Javascript jQuery-获取以输入名称作为键的数组,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我需要得到与this.form.elements返回的数组类型相同的数组,输入名称作为数组键 我尝试了this.toArray(),但即使它看起来一样,它也缺少名称键(键是数字) 以下是完整的功能: (function( $ ) { $.fn.blah = function(){ var that = this; return this.each(function(){ $(this).bind('change', function(){

我需要得到与
this.form.elements
返回的数组类型相同的数组,输入名称作为数组键

我尝试了
this.toArray()
,但即使它看起来一样,它也缺少名称键(键是数字)

以下是完整的功能:

(function( $ ) {
  $.fn.blah = function(){
    var that = this;
    return this.each(function(){
       $(this).bind('change', function(){
           var matches1 = that.toArray();  // this doesn't work
           var matches2 = this.form.elements;  // this works.

           console.log(matches1); // but both arrays look the same. wtf?
           console.log(matches2);

           return true;
        }).change();

   });
 };

 })(jQuery);

将其用作
$(“输入”).blah()

序列化是一种可能的选择。


$(this).serializeArray()重新编译它。:)

在javascript中,命名键不使用数组。你应该用一个对象来代替。我假设值应该是元素本身

var result = {};

$.each(this.form.elements, function() {
    result[ this.name ] = this;
});

关于您的更新,这一行:

var matches1 = that.toArray();  
…不起作用,因为您正在对jQuery对象调用jQuery的
toArray()

var matches1 = $.toArray( that );  
如果您想使用它,可以从库中调用它,并将jQuery对象传递给它

var matches1 = $.toArray( that );  
…虽然我不知道为什么要将表示所有
元素的jQuery对象转换为每个
更改
事件的数组

这一行:

var matches2 = this.form.elements;  // this works.
。。。之所以有效,是因为它只是从接收事件的
元素引用表单中的元素。它使用本机domapi属性来获取集合(从技术上讲,它不是数组)



我不得不编辑我的答案,因为我错误地使用了
toArray()
。我在考虑
makeArray()
toArray()
方法是
.get()
的包装器,其作用完全相同。

form.elements
返回HTML5中的对象

这些对象中的元素可以通过索引或名称访问。因此,如果您有一个表单,其中有一个名为“login”的输入元素,则可以执行以下操作:

form.elements.[0]


访问同一元素。您可以通过为每个表单元素添加两个条目及其相应的索引和名称来模拟这样的对象。但是如果
form.elements
对您有效,我建议您直接使用它。

这取决于
这个
的值。它是一组选择器,来自
$(“输入”).somefunction()..
谢谢您的详细解释:)那么我可以从“that”获得对元素的引用吗“this.form”?@Alexandra:Your
that
变量是对jQuery对象的引用,该对象包含原始
$('input')的结果
选择。因此,它引用在页面上找到的所有输入。当您执行
此.form.elements
操作时,您仅引用与
相同格式的元素(即接收
更改
事件的元素)。我想你的最后一句话基本上就结束了这一点。@karim79:可能是。我必须承认,我还不能完全理解代码的最终意图。@karim79:虽然我对
toArray
完全错了。它只是
的包装。get()
。我在考虑
makeArray
。有时我不得不对这个API的某些部分翻白眼。