jQuery - 获取带有输入名称作为键的数组

时间:2011-01-30 21:54:03

标签: javascript jquery jquery-plugins

我需要获得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);

将其用作$("input").blah();

3 个答案:

答案 0 :(得分:3)

在javascript中,您不使用数组作为命名键。你改用Object。我假设值应该是元素本身。

var result = {};

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

关于您的更新,此行:

var matches1 = that.toArray();  

...不起作用,因为您正在针对jQuery对象调用jQuery的toArray()

如果你想使用它,你可以从库中调用它,并将它传递给jQuery对象。

var matches1 = $.toArray( that );  

...虽然我不知道你为什么要在每个<input>事件中将代表所有change元素的jQuery对象转换为数组。< /秒>

这一行:

var matches2 = this.form.elements;  // this works.

...有效,因为它只是对接收事件的<input>元素中表单中元素的引用。它使用本机DOM API属性来获取集合(技术上不是数组)。


不得不编辑我的答案,因为我对toArray()的使用是错误的。我在想makeArray()toArray()方法是.get()的包装器,并且完全相同。

答案 1 :(得分:2)

Serialize是一个可能的选择。 http://api.jquery.com/serializeArray/

$(this).serializeArray()重新计算它。 :)

答案 2 :(得分:1)

form.elements在HTML5中返回HTMLCollectionHTMLFormControlsCollection的对象。

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

form.elements.[0]

form.elements["login"]

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