2013-05-07 4 views
0

У меня есть документ, который появляется на сайте в модульном блоке jQuery. Документ имеет кнопку печати в конце, которая просто печатает документ во всплывающем окне.Ошибка Печать через iframe - «Undefined» Ошибка при использовании Ctrl + P

Я хотел напечатать документ, только внутри iframe, с помощью Ctrl + P. Это потребовало предотвращения поведения по умолчанию для печати всей страницы, включая фон.

Это JQuery код для печати:

$(document).keydown(function(event) { 
    if (((event.ctrlKey == true) || (event.metaKey == true)) && (event.which == '80')) { 
      event.preventDefault(); 
      printAssessment(); 
     } 

}); 

function printAssessment() { 
    if ($('#frameContainer').length) { 
     $('#lightboxFrame')[0].contentWindow.print();  
    } 

} 

HTML, для моей страницы с IFRAME находится ниже:

<div id="frameContainer"> 
     <iframe id="lightboxFrame" width="950px" scrolling="auto" height="500px"> 
     <!DOCTYPE html> 
      <html> 
      <head> 
       <body> (Whole Document in a Div) </body> 
      ... 

Теперь проблема в том, что, когда я открываю свою модальность и нажмите Ctrl + P, он печатает, если я не прокручиваю модальную форму, как я ее хочу. Но если я перечисляю модальный, а затем нажмите Ctrl + P, это дает мне следующую ошибку:

Uncaught TypeError: Cannot read property 'contentWindow' of undefined 

Как ни странно, несмотря на то, когда IFrame открыта, она по-прежнему считает, что не определено, но только тогда, когда я прокручиваю модальный IFrame. Если я просто открываю модальный и нажимаю Ctrl + P, он отлично печатает.

ответ

0

Эй Используйте нажатие события вместо KeyDown

$(document).keypress(function(event) { 
if (((event.ctrlKey == true) || (event.metaKey == true)) && (event.which == '80')) { 
     event.preventDefault(); 
     printAssessment(); 
    } 

}); 

Надеется, что это работает.

+0

Какое событие имеет отношение к 'contentWindow'? – RoToRa

0

Кажется $('#lightboxFrame') не возвращает никаких элементов. Что делать, если вы меняете

if ($('#frameContainer').length) { 

в

if ($('#lightboxFrame').length) { 

?