jQuery:提交动态表单元素时出现问题

标签 jquery forms dynamic submit element

我正在尝试提交一个表单,其中包含页面完成加载后由 jQ 添加到 DOM 的动态元素。

当我在表单上运行 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>

点击提交按钮后,静态字段 afield 中的数据就会显示...但 jQuery 添加的任何somefields 都不会显示。

我发现了几个 similar questions这里。我正在遵循建议的解决方案,但没有效果。

我正在使用最新的 jQuery (1.4.1) - 并考虑使用 live() 事件绑定(bind)器。我有一种感觉可能有助于解决这个问题,但不知道如何将它与 validate() 插件结合使用。

有什么建议吗?

谢谢, 米^e

最佳答案

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

要给它们起一个不同的名称,这样做可能会稍微容易一些:

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

和:

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

关于jQuery:提交动态表单元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152099/

相关文章:

javascript - 通过 AJAX 发送电子邮件 - 显示进度/状态

javascript - 从 JSON 元素的内容构造 URL 以避免输出中出现编码字符的正确方法是什么?

javascript - insideHTML 无法在事件处理函数内工作(Javascript)

c - 在 C 中动态创建一个 TYPE 数组

c - C中使用realloc的动态内存分配

jquery - 如何设置背景图像离开前景图像的不透明度?

javascript - react 自定义事件监听器

html - 使可扩展搜索适合空间

javascript - 有条件地禁用输入(Vue.js)

javascript - JavaScript 数组在物理内存中是如何表示的?