KATSU
[E-Mail]
1999/03/17(水) 15:11:07
KATSUと言います。よろしくお願いいたします。(長文失礼いたします)
さっそくですが、ご助言ください。
後述のソースは、CGIで出力した動的なHTMLです。(主要部分のみ)
実際には、フレームセットを構成する、フレームのひとつのHTMLになります。
この画面では、JavaScriptを使用し、14:33:48まで、制限時間60分として
残り時間を表示するようにしています。(この辺の数値を動的に埋め込んでいます)
そこで問題なのですが.......
NC4.5でこの画面を表示します。
そしてウィンドウサイズを変更すると、画面が再描画されます。( <TABLE>の再配置のため? )
これだけだと別段問題はありません。
しかし、リサイズを二回連続で行なう(一回目の再描画で画面がクリアされた瞬間にすかさず
二度目のリサイズ)と、カウントダウンをしていたテキストボックスが空になってしまいます。
JavaScriptが停止してしまっているようです。
と言いますのは、実は、後述のソースでは省略させていただいていますが、画面上にボタンを
配置し、クリックすると呼ばれるいくつかのJavaScriptをいくつか記述しているの
ですが、これらのScriptも、すべて反応しなくなってしまうのです。
特に、サブミットボタンから onSubmitで呼び出しているScriptは、送信するデータを
加工する処理であるため、これが無視されると、こちらが期待しないデータがPOSTされて
しまい、大変困っています。
このようなケースでJavaScriptが停止してしまわないような注意点、または停止して
しまった場合の対処方法(再読み込みではなく)がありましたら、お教えください。
よろしくお願いいたします。
------以下HTMLです-------
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<Script language="JavaScript">
var id = 0;
var limit_time = 60;
var first_flg = 0;
var i_lim_hour = 0;
var i_lim_min = 0;
var i_lim_sec = 0;
timeout_flg = 0;
function LimitTimeSet(){
var s_num_base ="0123456789";
var s_time_str="14_33_48";
limit_hour = Math.floor((limit_time / 60));
limit_min = limit_time % 60;
i_lim_sec = 0 + (s_num_base.indexOf(s_time_str.substring(6,7))*10);
i_lim_sec = i_lim_sec + s_num_base.indexOf(s_time_str.substring(7,8));
i_lim_min = limit_min + (s_num_base.indexOf(s_time_str.substring(3,4))*10);
i_lim_min = i_lim_min + s_num_base.indexOf(s_time_str.substring(4,5));
if (i_lim_min >= 60) {
i_lim_min = i_lim_min - 60;
limit_hour = limit_hour + 1;
}
i_lim_hour = limit_hour + (s_num_base.indexOf(s_time_str.substring(0,1))*10);
i_lim_hour = i_lim_hour + s_num_base.indexOf(s_time_str.substring(1,2));
if (i_lim_hour >= 24) {
i_lim_hour = i_lim_hour - 24;
}
}
function Timer(){
var d_now_date,i_now_hour,i_now_min,i_now_min;
var i_cnt_hour,i_cnt_min,i_cnt_sec;
var h1 = "";
var h2 = "";
var m1 = "";
var m2 = "";
var s1 = "";
var s2 = "";
if (first_flg == 0) {
LimitTimeSet();
first_flg = 1;
}
d_now_date = new Date();
i_now_hour = d_now_date.getHours();
i_now_min = d_now_date.getMinutes();
i_now_sec = d_now_date.getSeconds();
if ((i_lim_sec - i_now_sec) < 0){
i_cnt_sec = 60 + (i_lim_sec - i_now_sec);
i_now_min = i_now_min + 1;
} else {
i_cnt_sec = i_lim_sec - i_now_sec;
}
if (i_cnt_sec < 0) {
i_cnt_sec = 0;
}
if ((i_lim_min - i_now_min) < 0){
i_cnt_min = 60 + (i_lim_min - i_now_min);
i_now_hour = i_now_hour + 1;
} else {
i_cnt_min = i_lim_min - i_now_min;
}
if (i_cnt_min < 0) {
i_cnt_min = 0;
}
if ((i_lim_hour - i_now_hour) < 0){
i_cnt_hour = 24 + (i_lim_hour - i_now_hour);
} else {
i_cnt_hour = i_lim_hour - i_now_hour;
}
if (i_cnt_hour < 0) {
i_cnt_hour = 0;
}
h1 = Math.floor(i_cnt_hour/10);
h2 = i_cnt_hour % 10;
m1 = Math.floor(i_cnt_min/10);
m2 = i_cnt_min % 10;
s1 = Math.floor(i_cnt_sec/10);
s2 = i_cnt_sec % 10;
document.fm.tm.value = "" + h1 + h2 + ":" + m1 + m2 + ":" + s1 + s2;
if (i_cnt_hour == 0 && i_cnt_min == 0 && i_cnt_sec == 0) {
clearTimeout(id);
timeout_flg = 1;
gonext();
return;
} else {
id = setTimeout("Timer()" , 900 );
}
}
function stop() {
clearTimeout(id);
}
function StartTimer(){
Timer();
}
</Script>
</HEAD>
<BODY onLoad="StartTimer();" onUnload="stop();" BGCOLOR="#FFFFC0">
<CENTER>
<FORM NAME="fm" onSubmit="return false;">
<TABLE>
<TR>
<TD>
残り時間:
</TD>
<TD>
</B></FONT><INPUT TYPE="text" SIZE=10 NAME="tm" VALUE="">
</TD>
</TABLE>
</FORM>
</CENTER>
</BODY>
</HTML>