- PR -

イベントを伴わない?動的なHTMLの作成

1
投稿者投稿内容
きくじろう
常連さん
会議室デビュー日: 2004/09/06
投稿数: 43
投稿日時: 2007-01-24 13:59
グループウェアの中への組込みスクリプトの中で、
JavaScriptを使って、TABLE内に表示する値を表示する処理を考えています。

JavaScriptのみで作成する場合、htmlのLOAD時やもしくはボタン押下時のイベント
でJavaScriptのファンクションを呼び出し、その中で指定する値をセットすること
ができますが、
今回は、ColdFusionのScriptへの組込み(Script本体の修正不可)で使用するため、
<BODY>タグのonloadイベントが使えません。

イベント無しでJavascriptのファンクションを呼び出すような方法がありましたら、
教えて頂けないでしょうか?

よろしくお願い申し上げます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-24 14:13
こんな感じでしょうか。
<script>
alert("foobar");
</script>
きくじろう
常連さん
会議室デビュー日: 2004/09/06
投稿数: 43
投稿日時: 2007-01-24 15:07
有難うございました。

ど素人なんでお恥ずかしいです。
解決しました。

function youbi() {
document.write = 'xxx';
}

<table>
<tr>
<td>1</td>
<td>xxxxxx</td>
<td><script>youbi();</script></td>
</tr>


</table>

でうまく動作しました。
と一旦は思ったのですが、このフィールド
値を替える時は、別のフィールドを変えたイベントに伴って
この処理を行う必要があります。

具体的には、
年月の値により1日から始まる日付の曜日をセットする処理です。
初期設定時は、当月の値に従って曜日をセットし、
翌月になって処理する時のため、年月の変更に従って曜日を再セット、
さらに登録済みのデータを開いた時のため指定年月に従ってセットする処理です。

このため、onload以外のイベントで最初に一度だけ自動的にFunctionを呼ぶ方法
は無いかとお尋ねした次第です。


[ メッセージ編集済み 編集者: きくじろう 編集日時 2007-01-24 16:20 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-01-24 16:44
いまいちどういうことか良く分かりませんが。
ライブラリを書き換えられないのであれば、今回のyoubi()のようにHTMLに埋め込めばいいわけで。

>年月の変更に従って

ここでイベントが発生するはずなんですが、それじゃだめなんでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-01-24 17:41
IEなら、
コード:
window.attachEvent("onload",function(){
    ...//何かの処理
});


で、BODYのロードイベントが使えます。
FireFoxにも似たようなものがあります。
きくじろう
常連さん
会議室デビュー日: 2004/09/06
投稿数: 43
投稿日時: 2007-01-24 19:39
アドバイス有難うございます。

window.attachEvent("onload",function(){

}

まさにこれです。

データ再表示の処理で実行したところ、間違いなくファンクションを呼び出す
ことはできましたが、
onloadのイベントが発生するタイミングがDBの値を取ってくるタイミングより
前になるせいか、値を取得した処理はできませんでした。

元の処理はCOLDFUSUSIONで作成された未公開ソースで行われており、
このソースにINCLUDEするものであるため、
ソース全体が触れないのがつらいところです。

曜日を月から算出して表示させているため、
曜日自体をDBに書き込んでおけば、月を変えたときは
イベントが発生させられるので、処理できるのでしょうが、
安直なので、後学のために方法は無いかとお尋ねした次第です。

有難うございました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-01-24 23:02
<body onload="hoge()">
というHTMLが生成されているなら、
コード:
//本来の関数を退避
var hoge_ = hoge;

//本来の関数をダミーで上書き
hoge = function(){
}

window.attachEvent("onload",function(){
    //先に本来の処理を呼び出す
    hoge_();

     ...//何かの処理
})


というようなことも可能です。
コード:
//本来の処理を退避
var hoge_ = hoge;

//本来の関数を上書き
hoge = function(){
    //本来の処理を実行
    hoge_();
    
    ...///何かの処理
}


でもいいですね。onloadで呼ばれる関数に上書きするパターンです。
1

スキルアップ/キャリアアップ(JOB@IT)