2008-10-04 61 views
27

我要循环的HTML表单的元件,并且<输入>字段的值存储在一个对象。下面的代码无法正常工作,但:循环以上元素jQuery中

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() 
Object length=42 
>>> $("#frmMain").children().filter(":checkbox") 
Object length=3 

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

+0

你的线程刚才救我20分钟线通过多种形式线路输入字段-_- ;. +1。 – zeboidlund 2011-11-28 18:22:40

回答

40

不认为你需要对这个报价:

var child = $("this"); 

尝试:

var child = $(this); 
+2

哇好赶 - 我没注意到 – Hugoware 2008-10-04 12:53:52

+0

谢谢!现在它为我工作。 – 2008-10-04 13:09:55

28

jQuery有一个很好的功能,通过一组元素的循环:.each()

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

不适用于我,请参阅我对该问题的编辑。更多的想法? – 2008-10-04 12:23:14

+0

该表单可能会有一段或类似其子项。您需要确保只选择输入元素。 – SpoonMeiser 2008-10-04 18:00:45

+0

“children()”获取表单中的所有DOM子元素,而不是元素。 – mpemburn 2013-11-01 14:13:11

13

取决于你需要每个孩子(如果你想通过AJA发布到某个地方X)你可以做...

$("#formID").serialize() 

它会为你自动创建一个字符串,所有的值。

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

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

我已经使用了以下前:

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包含所有的输入值。

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

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

0

,如果你想使用各项功能,它应该是这样的:

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

只需切换出关花括号的密切括号。谢谢你指出,工作,你为我节省了一些时间。

0

对我来说,所有这些都不起作用。对我而言有效的事情很简单:

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

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

编辑 JSFIDDLE

下面将工作

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