2012-04-05 5 views
1

Так что у меня есть страница с большим количеством текста и таблицы на ней, например.Функция обратного вызова после диалога диалогов javascript?

Я хочу, чтобы пользователи могли печатать только таблицу с помощью ссылки на «печать этой таблицы», но я все еще хочу, чтобы остальная часть страницы могла быть распечатана с помощью обычного метода печати браузера.

Так, чтобы начать с У меня есть print.css таблицы стилей включены, как показано ниже:

<link type="text/css" rel="stylesheet" href="style/print.css" media="print"> 

В print.css У меня есть класс набор «.noPrint» на дисплее: нет.

Мне кажется, что решение состоит в том, чтобы обернуть содержимое, которое не является таблицей в divs с классом «tempNoPrint», а при нажатии «распечатать эту таблицу» javascript добавит «noPrint» ко всем разделам с «tempNoPrint», тем самым скрывая их в версии принтера.

Это нормально, и я уверен, что это сработает.

Однако, как я могу удалить класс «noPrint» из всех разделов «tempNoPrint» после печать только таблицы выполнена? Есть ли обратный вызов javascript, отправленный из диалогового окна печати? Я мог бы использовать таймер, но, похоже, это было бы очень ненадежным.

+1

Вы пытались удалить класс noPrint после отправки данных на принтер? Я не думаю, что вам нужен обратный вызов здесь. – Chibuzo

+0

http://archive.plugins.jquery.com/project/printElement – Stefan

+0

Спасибо Чибузо, как глупо от меня! Я пробовал это, и он работает! Я добавил полный ответ. – bbeckford

ответ

2

Похоже, я был слишком расстроен!

Я завернул все содержимое на странице, что я не хотел печатать с кнопкой дивы с классом «noPrintCustom», то я называю эту функцию:

var printCustom = function() { 

    $('.noPrintCustom').addClass('noPrint'); 
    window.print(); 
    $('.noPrintCustom').removeClass('noPrint'); 
} 

спасибо всем, что помогли!

4

Это может быть немного ядерный подход, но то, что я делал ранее, когда срабатывает над этим, заключается в том, чтобы вывести бит, который я хочу распечатать, на скрытый iframe и распечатать его.

//build new document 
var code = "<!doctype html><html><head>"; 

//add in CSS needed by the table 
code += "<link rel='stylesheet' type='text/css' href='table.css' /></head><body>"; 

//get and add in table code 
var code += "<table>"+document.getElementById('some_table').innerHTML+"</table>"; 

//finish up new doc code 
code += "</body></html>"; 

//write new doc to hidden iframe (name: hiddenFrame) 
var doc = hiddenFrame.document.open("text/html","replace"); 
doc.write(code); 
doc.close(); 

//print 
hiddenFrame.print(); 
+0

Спасибо Mitya, но поскольку я хотел сохранить неповрежденный верхний и нижний колонтитул страницы и вставить много в тег 'head', чтобы поддержать это, мне было сложно заставить это работать правильно. – bbeckford

+0

Хороший маленький фрагмент для будущего отчаяния:) – T4NK3R

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