2010-01-28 110 views
2

我试图提交一个表单,其中包含动态元素,这些动态元素在页面完成加载后通过jQ添加到DOM中。jQuery:提交动态表单元素的问题

当我在表单上运行serialize()时,它会抓取硬编码到页面中的所有字段的数据 - 但不是动态字段。

这里有相同的一些代码片断..

HTML

<form id="someform" name="someform" method="post" action""> 
    <input type="text" name="afield" /> 
<ul id="somelist"> 
</ul> 
<input type="submit" name="submit" /> 
</form> 

<img id="add" src="add-button.png" /> 

<div class="new_unit" style="display:none"> 
<input type="text" name="somefield" /> 
</div> 

的JavaScript

<script type="text/javascript"> 
// Adds a new field to the form 
$('#add').click(function() { 
$('#somelist').append('<li>' + $('.new_unit').html() + '</li>'); 
}); 

// Validate before submission 
$('#someform').validate({ 
......., 
....., 
submitHandler: submit_form 
}); 

function submit_form() { 
_data = $('#someform').serialize(); 
alert(_data); 
} 
</script> 

在命中提交按钮,在静态字段的数据, 字段正在显示...但任何由jQuery添加的某些字段不是。

我在这里找到了几个similar questions。我遵守建议的解决方案,但没有效果。

我正在使用最新的jQuery(1.4.1) - 并考虑使用live()事件绑定器进行播放。我有一种可能有助于解决此问题的感觉,但无法弄清楚如何将它与validate()插件结合使用。

有什么建议吗?

感谢, 平方公尺Ë

+0

嗯,你的代码字面上粘贴到托管一个带有链接的测试文件到谷歌的jquery和ms的托管jquery.validate适用于我。至少在Firefox 3.6中。我可以给你一个完整的测试文件的副本,如果你想 – 2010-01-28 04:19:11

+0

Grrrr ......这个噩梦不会!对我而言,至少......直到我将这些[]包括在内。我想,最有可能的问题是类似命名字段的多个实例。感谢您的反馈意见。 – 2010-01-28 09:03:47

回答

4

的问题是,您的动态添加字段都为名称相同。你必须给他们不同的名字,或者,根据你在服务器上使用的内容,你可以给他们一个像somefield[]这样的名字来聚合它们(PHP和我相信Python处理这个)。

给他们一个不同的名称,它可能是稍微容易做到这一点:

<input type="text" id="copy" /> 

和:

$("#add").click(function() { 
    $("#copy").clone().removeAttr("id").attr("name", "field[]") 
    .appendTo("#somelist").wrap("<li>") 
}); 
+0

Coooool !!谢谢吨。 php []聚合完成了诀窍。克隆()功能是一个了不起的时间段。想知道为什么我从来没有用过这么久! – 2010-01-28 04:11:34