Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   При открытии нового окна window.open, слетают значения в input text (https://javascript.ru/forum/misc/36370-pri-otkrytii-novogo-okna-window-open-sletayut-znacheniya-v-input-text.html)

bistok 13.03.2013 14:07

При открытии нового окна 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

danik.js 13.03.2013 14:37

Все верно. Свойство value != атрибут value. Атрибут - это начальное значение для свойства. Динамически измененное свойство не приводит к изменению атрибута. Это касается свойств value, checked и других некоторых.
Как вариант - пробежаться по элементам формы и проставить их значения в атрибуты.
И не нужно "писать" в документ закрывающие теги (7 строчка). Это бесполезно.

bistok 13.03.2013 14:46

Спасибо за быстрый ответ.
Я практически не разбираюсь в джаваскрипте, буду очень признателен, если подскажите как пробежаться по элементам формы, чтобы перенести значения в новое окно. Массивом или как-то еще?

А заодно было бы правильно сразу запретить редактирование input в новом окне. Это реально сделать?

danik.js 13.03.2013 15:22

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);

bistok 13.03.2013 16:49

Большое спасибо, намучился, но сделал.

bistok 13.03.2013 16:55

А запретить редактирование только на новой странице реально?
Я попробовал добавить запрет, но он срабатывает и на основную страницу.

Очень бы хотелось установить запрет на редактирование только в новом окне.

danik.js 13.03.2013 16:59

Пройтись по элементам клона и проставить element.readOnly = true

bistok 13.03.2013 17:38

Понял, дело в том что я сначала пошел по пути form.elements[i].setAttribute('value', form.elements[i].value);

Потому что я не копировал полностью форму, копировал все кроме кнопки "Отправить".

Если использовать клон, то все ок с readonly, но кнопка не нужна.
Как можно убрать кнопку из клона формы?

bistok 13.03.2013 17:42

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

danik.js 13.03.2013 17:49

Можно и первым путем идти. Просто после записи в окно, используем код типа
var form = WinPrint.document.getElementsByTagName('form')[0];
// тут цикл с проходом по элементам и установкой readOnly = true


Или вторым путем, просто кнопку удалить через
var button = form.getElementsByTagName['button'][0];
button.parentNode.removeChild(button);


Часовой пояс GMT +3, время: 11:23.