アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaScriptのdiv.style属性の変更が反映されない:最後のDivタグを除いたすべてのDivタグに改ページ属性を有効にするようJavaScriptで制御したいと考えています。しかし、以下のようなプログラムでは、スタイル属性が更新されず改ページが実行されてしまうため、1枚真っ白な紙が印刷されることになってしまいます。こちらの意図したように動作させるにはどうしたらよいでしょうか。

<html>
<head>
<style>
div.test {
page-break-after:always;
color:black;
}
</style>
<script type="text/javascript">
window.onload = function() {
var divs = document.getElementsByTagName('div');
for(i = divs.length - 1; i >= 0; i--){
if(divs[i].className == "test"){
divs[i].style.pageBreakAfter = "";
break;
}
}
};
</script>
</head>
<body>
<div class="test">テスト</div>
<div class="test">テスト</div>
<div class="test">テスト</div>
</body>
</html>

A 回答 (3件)

break;


のまえに、
alert(i);
をいれてみると

この回答への補足

質問のコードの場合は「2」と表示されます

補足日時:2010/06/18 21:44
    • good
    • 0

「印刷プレビュー」でしか確認していませんが…


Fx(3.5)では、スクリプトを実行しなくても、最後の白紙は出力されません。
(pageBreakなんて、使ったこと無かったので思わず調べちゃいました)

>divs[i].style.pageBreakAfter = "";
だと、どうもCSSの指定が残ってしまうようなので、明示的に"auto"か"avoid"を指定することで、最後の白紙が出なくなるようです。
(理由はよくわかりません)
ただし、IE(6)ではavoidには対応していないようで、指定するとエラーがでてしまいます。
なので、"auto"指定にしておくのがよさそう。

もっとも、ご提示のサンプルのような場合であれば、page-breakを指定するクラスだけ別に作っておいて
 div.pagebreak { page-break-after:always; }
HTMLは、 <div class="test pagebreak">テスト</div> のようにしておいて、
classNameからpagebreakだけ取り除くという方法のほうが、クラス指定の状態と内容を常に一致した状態に保てるので、よくはないでしょうか?
    • good
    • 0
この回答へのお礼

pageBreakAfter="auto";にしてみたところIE8でも余分なページが出力されなくなりました。ご回答ありがとうございます。

お礼日時:2010/06/19 11:59

> divs[i].style.pageBreakAfter = "";



「element.style.property = ''; でスタイルを初期値に戻す事ができる」という規定はどこにもないので実装を変えた方がいいような気がします。
例えば、element.className = ''; あるいは、document.styleSheets を書き換える方法など。

onclickを使わずにイベント処理をする方法について。(1/2) | OKWave
http://okwave.jp/qa/q5931597.html
掲示板/スタイルシート質問板/テキストボックスのスタイル初期化 - TAG index Webサイト
http://www.tagindex.com/cgi-lib/q3bbs/patio.cgi? …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!