【问题标题】:jquery form elements to arrayjquery表单元素到数组
【发布时间】:2011-08-28 10:21:47
【问题描述】:

我正在尝试将所有表单元素放入数组中,然后使用 jquery 的 $.each() 函数遍历它们,并在此函数中获取每个元素的 id 和 title 属性。

我试过serializeArray(),但只能得到'name'和'value'属性。

我需要收集所有表单元素的东西,无论是输入(无论类型如何)、选择、文本区域,也无论它是否具有值、被选中或隐藏。

可能类似于 $('#form_id').find('input select textarea'); ?

知道如何实现吗?

【问题讨论】:

  • 可能是$('#form_id').find('input select textarea');之类的东西? ...去试试吧。

标签: jquery arrays forms loops each


【解决方案1】:

您可以使用:input 伪类获取所有表单元素:

var elems = $('#form_id').find(':input'); // changed this line

【讨论】:

  • 这不是只收集“输入”元素吗?
  • 不,这是一个伪类,匹配所有表单元素(输入、选择、文本区域、所有)
  • 与上述建议 ($('#form_id')[0].elements) 相比,性能如何?
  • 不管基准如何,我认为元素应该更快,它是表单的原生属性,没有什么可收集的。
  • 不要再使用:inputit will be removed in the future
【解决方案2】:

用途:

$('#form_id')[0].elements

它将返回一个包含所有表单元素的节点列表。

jQuery(
  function($)
  {
    $.each($('#form_id')[0].elements,
           function(i,o)
           {
            var _this=$(o);
            alert('id:'+_this.attr('id')+'\ntitle:'+_this.attr('title'));
           })

  }
);


请注意:元素集合还可能包含字段集或对象等元素,请参阅:http://www.w3.org/TR/html5/forms.html#category-listed

【讨论】:

  • 没关系 - 这只是用于初始验证(客户端) - 服务器端对所有提交的变量进行了更深入的过滤
【解决方案3】:

我认为这可以按照您想要的方式工作:

$('#form_id').children('input, select, textarea')

【讨论】:

  • 这将只匹配直系子女
  • 使用find 而不是children
【解决方案4】:

你可以使用这个功能

$.fn.serializeAssoc = function() {
    var formData = {};
    this.find('[name]').each(function() {
        formData[this.name] = this.value;  
    })
    return formData;
};

//And Use it like this

objArr = $('#FormID').serializeAssoc();

【讨论】:

  • 这将返回带有键和值的关联数组,其中键是表单字段名称,值是它在表单中的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2012-04-25
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多