jQuery的serializeArray不拾取动态创建的表单元素
-
26-09-2019 - |
题
我有使用AJAX是方的动态创建(作为表单元素的数据必须来自数据库)一个形式,我想序列化形式的元素通过AJAX提交。我目前只是测试使用代码从jQuery网站我的理论只是为了看看,如果我可以拿起表单元素,这就是问题所在:
$(document).ready(function() {
$('#btnCustomSearch').live('click', function() {
$('#results').html('');
alert($('#customSearchTable :input').serializeArray());
// get all the inputs into an array.
var fields = $('#customSearchTable :input').serializeArray();
jQuery.each(fields, function(i, field) {
$("#results").append(field.name + " = " + field.value + ", ");
});
// now we'll reformat the data as we need
// here we'll send the data via ajax
});
});
我需要之前做一些改变的数据提交和这个代码还没写,但什么我发现是,在页面加载的时候存在的页面上的任何输入元素拿起正确的,任何正在使用的浏览填充元件被正确地回升,但任何使用AJAX创建被忽略。
我知道这是用“活”通常解决了,但我不清楚应该如何进行serializeArray()
解决这个问题。使用Ajax的附加表单元素被添加到#customSearchTable
,这些都是不被拾起的。
任何帮助极大理解。
由于
解决方案
我在评论多一点这里阐述:
当你调用 .serializeArray()
它通过循环只是作为一个<form>
屈服会或尽可能接近反正,得到提交的元素。的关键部分是这里:
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
正如<form>
提交将不包括未经 name
属性元件中, .filter()
使用this.name
将筛选那些元件出来的人要序列的呼叫。
其他提示
有关任何其他人认为这是一个“问题”,请注意,按照尼克Craver的评论上面,这是必需的一切都是为了确保“名称”属性附加到动态创建新的表单元素。这解决了我的问题!非常感谢你确实尼克!
不隶属于 StackOverflow