자바스크립트 uncaught typeerror 질문입니다.

2020-12-18 (금) 21:29:11 2,270

아래 자바 스크립트가 실행되면서

Copy
<script language="javascript">
<!--
function flowtime(){                // 제한 시간 경과후 강제 submit. 이하 펑션 같음.
    chantime = setTimeout("timebar()", 1000);
}
function timebar(){
    var ti = document.timer.timebox.value
    ti = ti - 1;
    
    if(ti<1){
        form1.submit();
    }else{
        sec = ti
        window.document.timer.sec.value = sec;
        window.document.timer.timebox.value = ti;        
        chantime = setTimeout("timebar()", 1000);
    }
}
function cleartime(){
    clearTimeout(chantime);
}
function exam(){ 
    url = "speed.php?speed_db_title=$speed_db_title&speed_limit_time=$speed_limit_time&speed_pro_count=$speed_pro_count&speed_pro_point=$speed_pro_point&speed_perfect_point=$speed_perfect_point&speed_limit_day=$speed_limit_day&coin=$coin&uid=$uid&uname=$uname&speed_pro_no=$speed_pro_no&speed_correct_c=$speed_correct_c&quiz_db=$quiz_db&try_ok=$try_ok&reply=$reply&total_try=$total_try&speed_exp=$speed_exp&speed_expl=$speed_expl"
    parent.exam.location.href = url
}
//-->
</script>

콘솔창에 아래와 같은 에러가 보이는데,

Copy
speed.php?speed_db=..................................................=1:63)
    at <anonymous>:1:1
Copy
<body onload='flowtime();'>
Copy
echo "<form name=form1 method='post' onsubmit='return validate()' action=$PHP_SELF><table align='center'><tr><td align='center'><input type=text name=reply size=50 autocomplete='off' style='ime-mode:inactive;font-size:34px;font-family:Malgun Gothic;width:100%;height:55px;padding:10px;text-align:center;outline:none;margin:0;'></td></tr>
    <input type=hidden name=speed_db_title value=$speed_db_title>
    <input type=hidden name=speed_limit_time value=$speed_limit_time>
    <input type=hidden name=speed_pro_point value=$speed_pro_point>
    <input type=hidden name=speed_pro_count value=$speed_pro_count>
    <input type=hidden name=speed_perfect_point value=$speed_perfect_point>
    <input type=hidden name=speed_limit_day value=$speed_limit_day>
    <input type=hidden name=speed_pro_no value=$speed_pro_no>
    <input type=hidden name=coin value=$coin>
    <input type=hidden name=speed_pro_no value=$speed_pro_no>
    <input type=hidden name=speed_correct_c value=$speed_correct_c>
    <input type=hidden name=speed_correct value=$pro_split[1]>
    <input type=hidden name=total_try value=$total_try>
    <input type=hidden name=quiz_db value=$quiz_db>
    <input type=hidden name=try_ok value=ok>
    <input type=hidden name=speed_exp value=$speed_exp>
    <input type=hidden name=speed_expl value='$pro_split[2]'>
    <tr><td align='center' style='padding-top:10px;'><input type=button value='확인' onclick='form1.submit();' class='btn_01'></td></tr></table></form>    
    <center><form name=timer><table border='0'><tr><td><input type=hidden name=timebox size=20 value=$speed_limit_time><input type=text name=sec size=2 style='text-align:center;border:none;outline:none;color:#fb7272;font-size:30px;font-weight:bold;'></td></form></tr></table>";

이 에러를 없앨 방법이 있으면 부탁드립니다.

답변 2개

구글링하며 이리 저리 만지작거리다 자체적으로 문제점을 발견하여 해결했습니다.

에러 발생 원인은 javascript가 name이 timebox인 input보다 위에 있어 먼저 실행된 것이 문제였습니다.

따라서, 해결책은 javascript를 해당 input보다 아래에 위치시키고,

<body onload='flowtime();'>의 onload='flowtime();'을 javascript 속으로 옮겨서 해결했습니다.

Copy
<script language="javascript">
<!--
function flowtime(){                // 제한 시간 경과후 강제 submit. 이하 펑션 같음.
    chantime = setTimeout("timebar()", 1000);
}
function timebar(){
    var ti = document.timer.timebox.value;
    ti = ti - 1;
    
    if(ti<1){
        form1.submit();
    }else{
        sec = ti
        window.document.timer.sec.value = sec;
        window.document.timer.timebox.value = ti;        
        chantime = setTimeout("timebar()", 1000);
    }
}
function cleartime(){
    clearTimeout(chantime);
}
function exam(){ 
    url = "speed.php?speed_db_title=$speed_db_title&speed_limit_time=$speed_limit_time&speed_pro_count=$speed_pro_count&speed_pro_point=$speed_pro_point&speed_perfect_point=$speed_perfect_point&speed_limit_day=$speed_limit_day&coin=$coin&uid=$uid&uname=$uname&speed_pro_no=$speed_pro_no&speed_correct_c=$speed_correct_c&quiz_db=$quiz_db&try_ok=$try_ok&reply=$reply&total_try=$total_try&speed_exp=$speed_exp&speed_expl=$speed_expl"
    parent.exam.location.href = url
}
     flowtime();
//-->
</script>
2020-12-18 (금) 23:03:47
url = "speed.php?speed_db_title=$speed_db_title&speed_limit_time=$speed_limit_time&speed_pro_count=$speed_pro_count&speed_pro_point=$speed_pro_point&speed_perfect_point=$speed_perfect_point&speed_limit_day=$speed_limit_day&coin=$coin&uid=$uid&uname=$uname&speed_pro_no=$speed_pro_no&speed_correct_c=$speed_correct_c&quiz_db=$quiz_db&try_ok=$try_ok&reply=$reply&total_try=$total_try&speed_exp=$speed_exp&speed_expl=$speed_expl"
    parent.exam.location.href = url 부분에 

$speed_limit_time 는 php 변수를 쓰신거 같은데 쓰실려면 <?php echo $speed_limit_time; ?> 로 변경해보세요. $~ 되어 있는 부분들을 다 바꾸셔야됩니다.

답변을 작성하려면 로그인이 필요합니다.