Получить значения <form>-элемента после изменения JavaScript .innerHTML - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть форма с несколькими полями для ввода текста и выпадающим списком. Содержимое раскрывающегося списка создается сценарием php для соответствия структуре базы данных. То, что я пытаюсь сделать, это позволить пользователю выбрать опцию из выпадающего списка, а затем в соответствии с выбором обновить представление формы, загрузив некоторый текст из базы данных, а затем вставить его для редактирования пользователем (стиль AJAX, который является). Я снова генерирую всю форму с помощью php, чтобы добавить запрашиваемый контент в представление.

Вот проблема: теперь, когда пользователь внес изменения в текстовое содержимое полей ввода, он нажимает кнопку «Подтвердить изменения». Теперь мне нужно получить измененное содержимое текстовых полей, чтобы обновить строку в базе данных. Я не знаю, как правильно это сделать.

Я пытаюсь использовать POST-метод формы для доставки измененного контента в php-скрипт, но он не может получить какой-либо контент, потому что AJAX-стиль на самом деле не изменил HTML страницы.

Вот краткое описание того, как я пытаюсь этого достичь:

Заголовок страницы:

<head>
<script>
function updateForm(str) {
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                document.getElementById("divContainingForm").innerHTML=xmlhttp.responseText;
            }
    }

    xmlhttp.open("POST","/scripts/regenerateTheForm.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("id=" + str);
}
</script>
</head>

Тело страницы:

<form action="/scripts/changeTheOldOne.php" method="post">
    <div id="form">
        <fieldset>
            <label for='list'>Content to edit</label>
            <select id='list' name="list" onchange='updateForm(this.value)' autofocus>
            <?php echo(generateListOptions()); ?> //php-function
            </select>
            </fieldset>
            <fieldset>
                <label for="header">Header</label>
                <input required type="text" id="header" />
            </fieldset>
            <fieldset>
                <label for="body">Plain text</label>
                <textarea required id="body" rows="16" maxlength="1500"></textarea>
            </fieldset>
        </fieldset>
    </div>
</form>

Функция из регенерировать. TheFrom.php возвращает сгенерированную форму, в которой теперь есть текст в полях, а JavaScript записывает его на странице и обновляет представление пользователя. Теперь пользователь может просматривать извлеченное содержимое и редактировать его, но когда форма отправлена, changeTheOldOne.php не может получить обновленный AJAX и отредактированные пользователем значения формы из массива $ _POST.

1 Ответ

0 голосов
/ 16 февраля 2011

Проблема решена!

Это была просто вещь нуба. Он забыл метки имен из полей ввода, и поэтому PHP POST не мог получить никакой информации Я думал, что ID будет достаточно для PHP, но это не так!

...