Я сделал это:
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) убедитесь, что валидация успешно завершена первой, или вы получите несколько входов с одинаковыми именами.