Как обработать <div> как форму <input>

Я сделал это:

HTML

<form> <div id="textBox" contenteditable="true" name="textBox"><?php echo $storyText; ?> </div> <textarea id="hiddeninput" name="hiddeninput"></textarea> <input type="submit" id="save" name="save" value="Submit"/> </form> 

Javascript

 $('#save').click(function () { var mysave = $('#textBox').html(); $('#hiddeninput').val(mysave); $("form:first").submit(); $('#hiddeninput').append(mysave); alert($('#hiddeninput').val()); }); 

Таким образом, как предупреждение, так и приложение отображают правильную информацию, но при отправке я не буду сохранять #hiddeninput как переменную php. Первоначально у меня это было как скрытый метод ввода, но я пытаюсь показать, что он не будет публиковать, независимо от того, что я делаю,

Ваш код работает почти так, как есть. Но я предпочел бы использовать обычный <input type="hidden"> и вам не нужно запускать отправку для вашей формы в вашем случае, просто поместите значение в скрытое поле.

Учитывая вашу разметку, с небольшими изменениями

 <form action="showrequest.php"> <div id="textBox" contenteditable="true" name="textBox" style="width:300px;height:100px;"> </div> <textarea id="hiddeninput" name="hiddeninput"></textarea> <input type="submit" id="save" name="save" value="Submit"/> </form> 

JS

 $(function(){ $('#save').click(function () { var mysave = $('#textBox').html(); $('#hiddeninput').val(mysave); }); }); 

var_dump($_REQUEST) на стороне php дает

 array(2) { ["hiddeninput"]=> string(4) "test" ["save"]=> string(6) "Submit" } 

Попробуйте привязать событие отправки вместо события click. Что может произойти, форма отправляется до того, как будет задано значение вашего текстового поля.

 $('form').submit(function(){ var mysave = $('#textBox').html(); $('#hiddeninput').val(mysave); }); 

Я проверил этот пример с методом = «get» и получил html из div, чтобы он отображался в URL-адресе.

Я считаю, что ваша форма отправляется до того, как ваш js-код имеет шанс запустить. Поскольку вы отправляете вручную из jQuery, попробуйте предотвратить событие по умолчанию кнопки (которая также отправляет форму):

 $('#save').click(function(e) { e.preventDefault(); var mysave = $('#textBox').html(); $('#hiddeninput').val(mysave); $("form:first").submit(); }); 

Говоря только по опыту, вы не можете отправить значение div в форме POST .

Вы можете изменить его на текстовое поле, и если вы хотите ограничить пользователей от его редактирования, установите его для disabled .

Кроме того, вы можете использовать javascript для отправки формы и вывести значение из #hiddeninput таким образом.

Вот общий способ отправки любых элементов контента div, которые вы хотите (см. Примечания ниже):

 <form method="post" id="f"> <div id="txt" addToForm="f" contenteditable spellcheck="true" style="height:100px;width:300px;font-family:arial,sans serif;border:1px solid black;font-weight:normal;overflow-y:auto;" ></div><br /> <input type="button" value="Go" id="btnGo"> </form> <script type="text/javascript"> $(document).ready(function(){ $("#btnGo").click(function(){ $("div[addToForm]").each(function(){ var tId=$(this).prop("id"); $(this).after("<input type='hidden' name='"+tId+"' id='hdn"+tId+"'>"); $("#hdn"+tId).val($(this).html()); }); ("#f").submit(); }); }); </script> 

Примечание 1) использование <input type="hidden"> сохраняет любое форматирование (IE11 допускает больше, чем FF). Если вы хотите удалить все форматирование, в том числе CFLF (т. Е. От 's) от пользователей, попавших в Enter / Return, вместо этого используйте <textarea style="display:none;"></textarea> . Примечание 2) убедитесь, что валидация успешно завершена первой, или вы получите несколько входов с одинаковыми именами.