我有使用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的评论上面,这是必需的一切都是为了确保“名称”属性附加到动态创建新的表单元素。这解决了我的问题!非常感谢你确实尼克!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top