我想循环遍历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() Object length=42 >>> $("#frmMain").children().filter(":checkbox") Object length=3
有关如何正确执行循环的任何提示?
不认为你需要引用这个:
var child = $("this");
尝试:
var child = $(this);
jQuery具有很好的循环一组元素的功能: .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(); });