错误通过iframe打印 - 使用Ctrl + P时出现“未定义”错误

时间:2013-05-07 04:16:30

标签: jquery printing

我在jQuery模式框中弹出了一个文档。文档末尾有一个打印按钮,只是在弹出框中打印文档。

我想通过Ctrl + P在iframe中打印文档。这需要防止打印包括背景在内的所有页面的默认行为。

这是用于打印的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();    
    }

}

包含iframe的我的网页的HTML如下:

 <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,它打印正常。

2 个答案:

答案 0 :(得分:0)

嘿使用keypress事件而不是keydown

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

});

希望它会奏效。

答案 1 :(得分:0)

似乎$('#lightboxFrame')没有返回任何元素。如果你改变了怎么办

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

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