jquery serializearray не поднимая динамически созданные элементы формы

StackOverflow https://stackoverflow.com/questions/3626384

Вопрос

У меня есть форма, которая динамически создана с использованием 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 И это те, которые не поднимаются.

Любая помощь очень ценится.

Спасибо

Это было полезно?

Решение

Я изложу на комментарий немного больше здесь:

Когда вы называете .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