jquery动态添加元素无法提交解决方案

昨天写了一个页面,里面涉及到动态的创建和修改表单控件(form controls),用到的修改添加元素的方式为jquery方法为append,和replaceWith方法,凡是原有的控件后台都可以获取到值,凡是动态改变的元素,都无法获取值,这些控件当然都包含了name属性,但无论如何检查后台就是获取不到值。
提交方法用的jquery的post方法,表单表单元素通过serialize()方法进行串行化

$.post($('#form1').attr("action"), $('#form1').serialize(),
function(data) {
alert(data);
});

将表单的值串行化后提交,alert($('#form1').serialize())后发现,修改的元素并未串行化。以为是serialize()方法中有问题,就读了其方法源码,并未发现明显问题;其后感觉可能是replaceWith的方法的问题,读过其源码后,亦没有发现明显问题。
后来通过firebug去比较原生的表单元素和动态添加的表单元素后,发现了控件的jquery对象都有一个属性form,原生控件的form属性为form1,而动态添加的为null。问题找到了,原来表单form1不能找到我添加的元素,也是就说新添加的元素不在form这颗DOM树上。自然无法串行化,于是就更换了串行化时的选择器,没有通过form1,而是通过页面这个整体DOM

$.post($('#form1').attr("action"), $(':input').serialize(),
function(data) {
alert(data);
});

来串行化控件,验证后结果正确,貌似问题解决了。
当然依据这种思路还有一种解决办法,就是给每一个动态就该的元素,添加form属性,
$(element).attr("form",form's Id)

这样也可以解决问题。但总感觉不太对,晚上下班回来继续查,终于找到了端倪。
通过一个朋友的一篇文章[url]http://blog.csdn.net/liu510817387/article/details/7267733[/url]我检查了下自己的<form>和<table>标签的位置,发现果然有问题
<table>
<form id="form1"action="<c:url value='/gameentity/edit?'/>mentity_id=<c:out value='${mentity_id}'/>"method="post">
<tr class="title">……
原来是这个问题,修改过之后,完美解决问题。但是对于form和table这两个标签的位置为什么会导致新添加无form属性这个问题,依旧还不太理解。不过通过firebug可以看到,
<table>
<form id="form1" method="post" action="/city-mis/gameentity/edit"></form>
<tbody>
</table>
即form标签已经缩为一团啦,也许导致新添加的元素,位于form之外啦。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值