Я пытаюсь сделать некоторый ввод данных с помощью jQuery модальное Диалоговое окно. Я надеялся использовать что-то как следующее для собирания моих данных для регистрации.
data = $('#myDialog').serialize();
Однако это ни к чему не приводит. Если я ссылаюсь просто на содержание формы вместо этого myDialog затем, я получаю все поля на странице кроме полей в моем диалоговом окне.
Что лучший способ состоит в том, чтобы собрать поля формы в диалоговом окне для представления Ajax?
Причина, по которой это происходит, заключается в том, что диалог
фактически удаляет ваши элементы и добавляет их на корневом уровне в тело документа. Это делается для того, чтобы сценарий диалога мог быть уверенным в своем позиционировании (чтобы быть уверенным, что данные, которые отображаются в диалоге, не содержатся, скажем, в относительно позиционируемом элементе). Это означает, что ваши поля на самом деле больше не содержат в вашей форме.
Вы по-прежнему можете получать их значения, обращаясь к отдельным полям по идентификатору (или чему-то подобному), но если вы хотите использовать удобная функция сериализации
, вы
Я только что столкнулся с той же проблемой, и, поскольку у меня было слишком много полей в моем диалоге, чтобы ссылаться на них по отдельности, я заключил диалог во временную форму, сериализуйте ее и добавьте результат к сериализованным данным моей исходной формы перед выполнением вызова ajax:
function getDialogData(dialogId) {
var tempForm = document.createElement("form");
tempForm.id = "tempForm";
tempForm.innerHTML = $(dialogId).html();
document.appendChild(tempForm);
var dialogData = $("#tempForm").serialize();
document.removeChild(tempForm);
return dialogData;
}
function submitForm() {
var data = $("#MyForm").serialize();
var dialogData = getDialogData("#MyDialog");
data += "&" + dialogData;
$.ajax({
url: "MyPage.aspx",
type: "POST",
data: data,
dataType: "html",
success: function(html) {
MyCallback(html);
}
});
}