7

我有一个使用 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而这些是未被拾取的。

非常感谢任何帮助。

谢谢

4

2 回答 2

8

我将在这里进一步解释评论:

当您调用.serializeArray()它时,它就像<form>提交一样循环或尽可能接近,以获取要提交的元素。关键部分在这里

.filter(function() {
  return this.name && !this.disabled &&
         (this.checked || rselectTextarea.test(this.nodeName) ||
         rinput.test(this.type));
})

就像<form>提交不会包含没有name属性的元素一样,.filter()调用 usingthis.name会将这些元素从要序列化的元素中过滤掉。

于 2010-09-03T01:34:58.490 回答
1

对于认为这是“问题”的其他任何人,请注意,根据 Nick Craver 上面的评论,所需要做的就是确保将“名称”属性附加到动态创建的新表单元素中。这解决了我的问题!非常感谢你,尼克!

于 2010-09-02T12:11:44.300 回答