循环遍历jQuery中的元素

我想循环遍历HTML表单的元素,并将字段的值存储在对象中。 但是,以下代码不起作用:

function config() { $("#frmMain").children().map(function() { var child = $("this"); if (child.is(":checkbox")) this[child.attr("name")] = child.attr("checked"); if (child.is(":radio, checked")) this[child.attr("name")] = child.val(); if (child.is(":text")) this[child.attr("name")] = child.val(); return null; }); 

以下都没有(受jobscry答案的启发):

 function config() { $("#frmMain").children().each(function() { var child = $("this"); alert(child.length); if (child.is(":checkbox")) { this[child.attr("name")] = child.attr("checked"); } if (child.is(":radio, checked")) this[child.attr("name")] = child.val(); if (child.is(":text")) this[child.attr("name")] = child.val(); }); } 

警报始终显示child.length == 0 。 手动选择元素有效:

    
 >>> $(“#frmMain”)。children()
对象长度= 42
 >>> $(“#frmMain”)。children()。filter(“:checkbox”)
对象长度= 3

有关如何正确执行循环的任何提示?

不要以为你需要引用:

 var child = $("this"); 

尝试:

 var child = $(this); 

jQuery具有很好的循环遍历一组元素的function: .each()

 $('#formId').children().each( function(){ //access to form element via $(this) } ); 

根据您对每个孩子的需求(如果您希望通过AJAX将其发布到某个地方),您可以…

 $("#formID").serialize() 

它会自动为您创建一个包含所有值的字符串。

至于循环对象,你也可以这样做。

 $.each($("input, select, textarea"), function(i,v) { var theTag = v.tagName; var theElement = $(v); var theValue = theElement.val(); }); 

我之前使用过以下内容:

 var my_form = $('#form-id'); var data = {}; $('input:not([type=checkbox]), input[type=checkbox]:selected, select, textarea', my_form).each( function() { var name = $(this).attr('name'); var val = $(this).val(); if (!data.hasOwnProperty(name)) { data[name] = new Array; } data[name].push(val); } ); 

这只是从内存中编写的,因此可能包含错误,但这应该使一个名为data的对象包含所有输入的值。

请注意,您必须以特殊方式处理复选框,以避免获取未选中复选框的值。 无线电输入可能也是如此。

另请注意,使用数组存储值,对于一个输入名称,您可能具有来自多个输入的值(特别是复选框)。

如果你想使用每个函数,它应该是这样的:

 $('#formId').children().each( function(){ //access to form element via $(this) } ); 

只需将关闭的花括号关闭即可。 谢谢你指出来,jobscry,你救了我一些时间。

对我来说,所有这些都没有用。 对我有用的东西非常简单:

 $("#formID input[type=text]").each(function() { alert($(this).val()); }); 

这是循环访问表单元素的表单的最简单方法。 在每个function中,您可以检查并构建您想要的任何内容。 构建对象时请注意,您需要在每个函数之外声明它。

编辑JSFIDDLE

以下将有效

 $('form[name=formName]').find('input, textarea, select').each(function() { alert($(this).attr('name')); });