我有一个使用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
});
});
我需要在提交之前对数据进行一些更改,而且这段代码还没有编写,但我发现在页面加载时存在的页面上的任何输入元素都是正确的,任何使用Javascript填充的元素将被正确选取,但使用ajax创建的元素将被忽略。
我知道这通常是使用“live”解决的,但我不清楚如何使用serializeArray()
来解决这个问题。使用Ajax的其他表单元素会添加到#customSearchTable
中,而这些元素是未被拾取的元素。
任何帮助都非常感谢。
由于
答案 0 :(得分:7)
我将在这里详细阐述评论:
当你致电.serializeArray()
时,它会像<form>
提交一样尽可能地或尽可能接近地提交,以便提交要素。关键部分is here:
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
正如<form>
提交不包含没有name
attribute的元素一样,使用this.name
的{{3}}调用将过滤那些要序列化的元素。< / p>
答案 1 :(得分:0)
对于其他任何认为这是“问题”的人,请注意,根据上面的Nick Craver的评论,所需要的只是确保将“name”属性附加到动态创建的新表单元素。这解决了我的问题!非常感谢尼克!