0

次の印刷プラグインを使用しています: Ask Ben Print Plugin

プラグインは、入力フィールドのコンテンツを除くページ上のあらゆるものに対して非常にうまく機能します. このプラグインを使用すると、何らかの理由で入力フィールドが印刷プレビュー/最終印刷ドキュメントに表示されない入力フィールドの内容を含むページを印刷できるようにする必要があります。Ctrl+P メソッドを使用して入力フィールドを含むページを印刷すると、入力フィールドの内容が正しく表示されます。

入力フィールドの内容を印刷できない原因となっている以下のコードについて、誰かが特定するのを手伝ってくれるかどうか疑問に思っていました。よろしくお願いします!

JQuery 関数呼び出し:

$(".main-container").print();

Javascript:

// Create a jquery plugin that prints the given element.
jQuery.fn.print = function() {
    // NOTE: We are trimming the jQuery collection down to the
    // first element in the collection.
    if (this.size() > 1) {
        this.eq(0).print();
        return;
    } else if (!this.size()) {
        return;
    }

    // ASSERT: At this point, we know that the current jQuery
    // collection (as defined by THIS), contains only one
    // printable element.
    // Create a random name for the print frame.
    var strFrameName = ("printer-" + (new Date()).getTime());

    // Create an iFrame with the new name.
    var jFrame = $("<iframe name='" + strFrameName + "'>");

    // Hide the frame (sort of) and attach to the body.
    jFrame.css("width", "1px").css("height", "1px").css("position", "absolute").css("left", "-9999px").appendTo($("body:first"));

    // Get a FRAMES reference to the new frame.
    var objFrame = window.frames[strFrameName];

    // Get a reference to the DOM in the new frame.
    var objDoc = objFrame.document;

    // Grab all the style tags and copy to the new
    // document so that we capture look and feel of
    // the current document.
    // Create a temp document DIV to hold the style tags.
    // This is the only way I could find to get the style
    // tags into IE.
    var jStyleDiv = $("<div>").append(
    $("style").clone());

    // Write the HTML for the document. In this, we will
    // write out the HTML of the current element.
    objDoc.open();
    objDoc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
    objDoc.write("<html>");
    objDoc.write("<body>");
    objDoc.write("<head>");
    objDoc.write("<title>");
    objDoc.write(document.title);
    objDoc.write("</title>");
    objDoc.write(jStyleDiv.html());
    objDoc.write("</head>");
    objDoc.write(this.html());
    objDoc.write("</body>");
    objDoc.write("</html>");
    objDoc.close();

    // Print the document.
    objFrame.focus();
    objFrame.print();

    // Have the frame remove itself in about a minute so that
    // we don't build up too many of these frames.
    setTimeout(

    function() {
        jFrame.remove();
    }, (60 * 1000));
}​
4

1 に答える 1

1

プラグインは$(this).html();、印刷用 iFrame に送信されるものを決定するために使用します。入力を具体的に選択している場合は、入力のテキストを印刷するために値も指定する必要があります。<div>テストを実行したとき、入力を a でラップし、代わりに含まれる div を出力するようにプラグインに指示すると、入力フィールドの内容を出力できました。編集:テキストを追加してから印刷機能を開始する代わりに、プラグインに HTML として登録されたvalue=""のを設定しました。<input>

ここに jsFiddle があります: http://jsfiddle.net/radiatorsounds/D5tef/

明確にするために、parentDiv.html() が適切に取得できるようにvalue=""、各入力 (HTML としてカウントされる) をその (HTML としてカウントされない) に設定する必要があります。コマンドをval()実行する直前に実行する必要があるこのコードでフィドルを更新しました。print();

$('#printTheDivLink').click(function() {
    $('div input').each(function() {
        $(this).attr('value', $(this).val());
    });
    $('#divToPrint').print();
});​
于 2012-12-10T03:16:00.330 に答える