1

私はこのJavaScript(jQueryを使用)を持っています:

var g_files_added, socket, cookie, database = null;
var file_contents = [];
function viewFile(key, filename) {
    $('#title-filename').text(filename);
    $('.prettyprint').text(file_contents[key]);
    $('#viewFileModal').modal('show');
}
$(document).ready(function() {
    $(document).on('shown', '#viewFileModal', function(event) {
            prettyPrint();
    });
});

// Variables have been set in code not shown, irrelevant to problem.
// prettyPrint() is called everytime the #viewFileModal is shown,
// but its effect is only felt once.

そのため、 viewFileModalprettyPrint()モーダル ボックス (Bootstrap 提供) が表示されるたびに呼び出されますが、ページの読み込みごとに 1 回だけ効果があるように見えます。

prettyPrint()モーダルボックスを表示させた後、JSコンソールでコメントアウトして入力してみました。実際には、ボックスが最初に表示されたときにのみ効果があります(ページの読み込みごと)。

何か案は?私はこれにしばらく立ち往生しています。prettyPrint()また、viewFile 関数に呼び出しを入れてみました。しかし、効果は同じです。

どうもありがとう。

サム。

4

3 に答える 3

7

「prettyPrint()」を呼び出すと、整形後に「prettyPrinted」という名前のクラスが PRE タグに追加されます。以下の行は、ページ上の「prettyPrinted」クラスのすべてのインスタンスを削除して、prettyPrint() 関数が PRE タグを再整形できるようにします。これは、PRE タグを DIV に動的に追加しなくても実行できます。

$('.prettyprinted').removeClass('prettyprinted');
于 2013-05-29T20:20:27.923 に答える
1

マテに感謝。解決策は、このように変更することでした。つまり、テキストだけでなく、プレ全体を動的に追加します。

var g_files_added, socket, cookie, database = null;
var file_contents = [];
function viewFile(key, filename) {
    $('#title-filename').text(filename);
    $('#fileblock').html('<pre class="prettyprint">' + file_contents[key] + '</pre>'); // fileblock is a div.
    $('#viewFileModal').modal('show');
}
$(document).ready(function() {
    $(document).on('shown', '#viewFileModal', function(event) {
        prettyPrint();
    });
});

:)

于 2013-04-15T13:22:48.293 に答える