При открытии нового окна window.open, слетают значения в input text
На сайте существует длинная форма заказа товаров, котороя содержит большое кол-во input type='text'.
Появилась необходимость сделать печать заполненной формы заказа (только формы а не всей страницы) Для печати помещаю область в блок <div id="print" class="contentpane"> и использую след. ф-цию var prtContent = document.getElementById(strid); var prtCSS = '<link rel="stylesheet" href="/templates/css/template.css" type="text/css" />'; var WinPrint = window.open('','','left=50,top=50,width=800,height=640,toolbar=0,scrollbars=1,status=0'); WinPrint.document.write('<div id="print" class="contentpane">'); WinPrint.document.write(prtCSS); WinPrint.document.write(prtContent.innerHTML); WinPrint.document.write('</div>'); WinPrint.document.close(); WinPrint.focus(); WinPrint.print(); /*WinPrint.close();*/ prtContent.innerHTML=strOldOne; Но уже при открытии нового окна все значения в input обнуляются. Подскажите куда копать? Или как можно передлать ф-цию печати области страницы, чтобы не обнулялись значения в input |
Все верно. Свойство value != атрибут value. Атрибут - это начальное значение для свойства. Динамически измененное свойство не приводит к изменению атрибута. Это касается свойств value, checked и других некоторых.
Как вариант - пробежаться по элементам формы и проставить их значения в атрибуты. И не нужно "писать" в документ закрывающие теги (7 строчка). Это бесполезно. |
Спасибо за быстрый ответ.
Я практически не разбираюсь в джаваскрипте, буду очень признателен, если подскажите как пробежаться по элементам формы, чтобы перенести значения в новое окно. Массивом или как-то еще? А заодно было бы правильно сразу запретить редактирование input в новом окне. Это реально сделать? |
var form = document.getElementsByTagName('form'); for (var i = 0; i < form.elements.length; i++) { form.elements[i].setAttribute('value', form.elements[i].value); } Можно еще так: var clone = form.cloneNode(true); printWindow.document.body.appendChild(clone); |
Большое спасибо, намучился, но сделал.
|
А запретить редактирование только на новой странице реально?
Я попробовал добавить запрет, но он срабатывает и на основную страницу. Очень бы хотелось установить запрет на редактирование только в новом окне. |
Пройтись по элементам клона и проставить element.readOnly = true
|
Понял, дело в том что я сначала пошел по пути form.elements[i].setAttribute('value', form.elements[i].value);
Потому что я не копировал полностью форму, копировал все кроме кнопки "Отправить". Если использовать клон, то все ок с readonly, но кнопка не нужна. Как можно убрать кнопку из клона формы? |
в принципе если использовать disabled кнопка не активна, так что все ок, но если подскажете как удалить элемент, все равно пригодится.
|
Можно и первым путем идти. Просто после записи в окно, используем код типа
var form = WinPrint.document.getElementsByTagName('form')[0]; // тут цикл с проходом по элементам и установкой readOnly = true Или вторым путем, просто кнопку удалить через var button = form.getElementsByTagName['button'][0]; button.parentNode.removeChild(button); |
Часовой пояс GMT +3, время: 11:23. |