2013-07-18 4 views
0

У меня есть разбиение на страницы, реализованное на моем представлении, разработанное в C# MVC. Pagination реализуется с помощью AJAX. Пользователь может выбирать записи на страницах просмотра, и когда они нажимают кнопку «Печать», которая находится на странице, будут напечатаны только те выбранные записи. Для этого переместите выбранную запись в <div id="ToPrintContainer" >, которая находится на странице «Макет».Проблема при печати выбранных элементов

На нажатием кнопки печати

  1. Я клонировать <div id="ToPrintContainer"> в мой взгляд.

  2. присвоено имя .divPrintDetaileddisplay:none.

  3. window.print()

  4. Удалите display:none из .divPrintDetailed

  5. Наконец удалить или очистить скопированные записи.

<div id="ToPrintContainer" > будет содержать только записи, которые пользователь хочет распечатать.

<div class ="divPrintDetailed"> будет кодировать все записи.

Проблема в печати i см. Пустую страницу.

если я комментарий $('.copiedDivForPrint').empty();

Я вижу, выбранные записи в окне печати, которая является то, что я хочу, чтобы это произошло, но копируются записи не будут удалены из вида.

Вставляемый ниже код jQuery.

$('#btnPrnt').unbind('click').bind("click", function() { 
// copy the selected records into the view 
      $("#divTestPrintContainer").clone().addClass('copiedDivForPrint').insertAfter('.StatsCriteria'); 
// don't display the entire records on print 
     $('.divPrintDetailed').css({ 'display': 'none' }); 
     window.print(); 
     $('.divPrintDetailed').css({ 'display': '' }); 
     $('.copiedDivForPrint').empty(); 
     return false; 
    }); 
+0

[Этот парень] (http://stackoverflow.com/a/7644857/221708) имеет очень элегантный подход к печати - в основном ваш подход (изменить страницу с JavaScript, окна ' .print', затем верните назад), а также некоторые дополнительные биты, чтобы обрабатывать случай, когда пользователь нажимает «Печать» в меню браузера. –

+0

Является '' divTestPrintContainer', содержащимся в '.divPrintDetailed'? –

+0

Когда вы комментируете '$ ('. CopiedDivForPrint'). Empty();', правильно ли оно печатается? Если это так, это действительно удивительно, потому что «окно.print' предположительно блокируется до тех пор, пока это не будет сделано - поэтому я не ожидал бы кода после 'window.print', чтобы повлиять на то, что было напечатано. Какой браузер вы используете? –

ответ

0

Завершение выполнения кода после window.print() устраняет проблему.

setTimeout() пришел на помощь.

Fix:

setTimeout(function() { 
      $("#cpdDivFPrt").remove(); 
     }, 500); 
1

Иногда легче прийти с совершенно другим направления:

1) Скопируйте содержимое, которое необходимо скрытый iframe, (в том числе ваших деклараций стилей - сделать фиктивную страницу обертки заглушки).

2) Печать с iframe.

Смежные вопросы