Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.03.2013, 14:07
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

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

Последний раз редактировалось bistok, 13.03.2013 в 14:31.
Ответить с цитированием
  #2 (permalink)  
Старый 13.03.2013, 14:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Все верно. Свойство value != атрибут value. Атрибут - это начальное значение для свойства. Динамически измененное свойство не приводит к изменению атрибута. Это касается свойств value, checked и других некоторых.
Как вариант - пробежаться по элементам формы и проставить их значения в атрибуты.
И не нужно "писать" в документ закрывающие теги (7 строчка). Это бесполезно.
Ответить с цитированием
  #3 (permalink)  
Старый 13.03.2013, 14:46
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

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

А заодно было бы правильно сразу запретить редактирование input в новом окне. Это реально сделать?
Ответить с цитированием
  #4 (permalink)  
Старый 13.03.2013, 15:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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);
Ответить с цитированием
  #5 (permalink)  
Старый 13.03.2013, 16:49
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

Большое спасибо, намучился, но сделал.
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2013, 16:55
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

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

Очень бы хотелось установить запрет на редактирование только в новом окне.
Ответить с цитированием
  #7 (permalink)  
Старый 13.03.2013, 16:59
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Пройтись по элементам клона и проставить element.readOnly = true
Ответить с цитированием
  #8 (permalink)  
Старый 13.03.2013, 17:38
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

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

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

Если использовать клон, то все ок с readonly, но кнопка не нужна.
Как можно убрать кнопку из клона формы?
Ответить с цитированием
  #9 (permalink)  
Старый 13.03.2013, 17:42
Интересующийся
Отправить личное сообщение для bistok Посмотреть профиль Найти все сообщения от bistok
 
Регистрация: 13.03.2013
Сообщений: 10

в принципе если использовать disabled кнопка не активна, так что все ок, но если подскажете как удалить элемент, все равно пригодится.
Ответить с цитированием
  #10 (permalink)  
Старый 13.03.2013, 17:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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


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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение значения input при смене значения select galart jQuery 4 30.01.2015 19:39
Вывод порядкового номера li в списке profxhtml Общие вопросы Javascript 4 13.04.2011 12:30
Как указать title при открытии окна через window.open для chrome milvic Opera, Safari и др. 4 15.01.2011 15:18
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 01:04
как при открытии окна закрыть предыдущее Евдокимова Events/DOM/Window 3 16.09.2008 17:12