테스트 사이트 - 개발 중인 베타 버전입니다

cannot read properties of undefined (reading 'document') 채택완료

망고프리 2년 전 조회 2,006

</p>

<p>var target;

var pop_top;

var pop_left;

var cal_Day;</p>

<p>var oPopup = 

window.createPopup();</p>

<p>function Calendar_Click(e) {

    cal_Day = e.title;

    if (cal_Day.length > 6) {

        target.value = cal_Day

    }

    oPopup.hide();

}</p>

<p>function Calendar_D(obj) {

    var now = obj.value.split("-");

    target = obj;

    pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;

    pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;</p>

<p>    if (now.length == 3) {

        Show_cal(now[0],now[1],now[2]);                    

        

    } else {

        now = new Date();

        Show_cal(now.getFullYear(), now.getMonth()+1, now.getDate());

    }

}</p>

<p>function Calendar_D_No_Hyphen(obj) {

    var now = obj.value.split("-");

    target = obj;

    pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;

    pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;</p>

<p>    if (now.length == 3) {

        Show_cal_No_Hyphen(now[0],now[1],now[2]);                    

    } else {

        now = new Date();

        Show_cal_No_Hyphen(now.getFullYear(), now.getMonth()+1, now.getDate());

    }

}</p>

<p>function Calendar_W(obj) {

    var now = obj.value.split("-");

    target = obj;

    pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;

    pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;</p>

<p>    if (now.length == 2) {

        Show_cal_W(now[0],now[1]);                    

    } else {

        now = new Date();

        Show_cal_W(now.getFullYear(), now.getMonth()+1);

    }

}</p>

<p>function Calendar_M(obj) {

    var now = obj.value.split("-");

    target = obj;

    pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;

    pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;</p>

<p>    if (now.length == 2) {

        Show_cal_M(now[0],now[1]);                    

    } else {

        now = new Date();

        Show_cal_M(now.getFullYear(), now.getMonth()+1);

    }

}</p>

<p>function doOver(el) {

    cal_Day = el.title;</p>

<p>    if (cal_Day.length > 7) {

        el.style.borderColor = "#FF0000";

    }

}</p>

<p>function doOut(el) {

    cal_Day = el.title;</p>

<p>    if (cal_Day.length > 7) {

        el.style.borderColor = "#FFFFFF";

    }

}</p>

<p>function day2(d) {    // 2자리 숫자료 변경

    var str = new String();

    

    if (parseInt(d) < 10) {

        str = "0" + parseInt(d);

    } else {

        str = "" + parseInt(d);

    }

    return str;

}</p>

<p>function Show_cal(sYear, sMonth, sDay) {

    var Months_day = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31)

    var Month_Val = new Array("01","02","03","04","05","06","07","08","09","10","11","12");

    var intThisYear = new Number(), intThisMonth = new Number(), intThisDay = new Number();</p>

<p>    datToday = new Date();                                                    // 현재 날자 설정

    

    intThisYear = parseInt(sYear,10);

    intThisMonth = parseInt(sMonth,10);

    intThisDay = parseInt(sDay,10);

    

    if (intThisYear == 0) intThisYear = datToday.getFullYear();                // 값이 없을 경우

    if (intThisMonth == 0) intThisMonth = parseInt(datToday.getMonth(),10)+1;    // 월 값은 실제값 보다 -1 한 값이 돼돌려 진다.

    if (intThisDay == 0) intThisDay = datToday.getDate();

    

    switch(intThisMonth) {

        case 1:

                intPrevYear = intThisYear -1;

                intPrevMonth = 12;

                intNextYear = intThisYear;

                intNextMonth = 2;

                break;

        case 12:

                intPrevYear = intThisYear;

                intPrevMonth = 11;

                intNextYear = intThisYear + 1;

                intNextMonth = 1;

                break;

        default:

                intPrevYear = intThisYear;

                intPrevMonth = parseInt(intThisMonth,10) - 1;

                intNextYear = intThisYear;

                intNextMonth = parseInt(intThisMonth,10) + 1;

                break;

    }

    intPPyear = intThisYear-1

    intNNyear = intThisYear+1</p>

<p>    NowThisYear = datToday.getFullYear();                                    // 현재 년

    NowThisMonth = datToday.getMonth()+1;                                    // 현재 월

    NowThisDay = datToday.getDate();                                            // 현재 일

    

    datFirstDay = new Date(intThisYear, intThisMonth-1, 1);            // 현재 달의 1일로 날자 객체 생성(월은 0부터 11까지의 정수(1월부터 12월))

    intFirstWeekday = datFirstDay.getDay();                                    // 현재 달 1일의 요일을 구함 (0:일요일, 1:월요일)

    //intSecondWeekday = intFirstWeekday;

    intThirdWeekday = intFirstWeekday;

    

    datThisDay = new Date(intThisYear, intThisMonth, intThisDay);    // 넘어온 값의 날자 생성

    //intThisWeekday = datThisDay.getDay();                                        // 넘어온 날자의 주 요일

    

    intPrintDay = 1;                                                                // 달의 시작 일자

    secondPrintDay = 1;

    thirdPrintDay = 1;</p>

<p>    Stop_Flag = 0

    

    if ((intThisYear % 4)==0) {                                                // 4년마다 1번이면 (사로나누어 떨어지면)

        if ((intThisYear % 100) == 0) {

            if ((intThisYear % 400) == 0) {

                Months_day[2] = 29;

            }

        } else {

            Months_day[2] = 29;

        }

    }

    intLastDay = Months_day[intThisMonth];                        // 마지막 일자 구함</p>

<p>    Cal_HTML = "<html><body>";

    Cal_HTML += "<form name='calendar'>";

    Cal_HTML += "<table id=Cal_Table border=0 bgcolor='#f4f4f4' cellpadding=1 cellspacing=1 width=100% onmouseover='parent.doOver(window.event.srcElement)' onmouseout='parent.doOut(window.event.srcElement)' style='font-size : 12;font-family:굴림;'>";

    Cal_HTML += "<tr height='35' align=center bgcolor='#f4f4f4'>";

    Cal_HTML += "<td colspan=7 align=center>";

    Cal_HTML += "    <select name='selYear' STYLE='font-size:11;' OnChange='parent.fnChangeYearD(calendar.selYear.value, calendar.selMonth.value, "+intThisDay+")';>";

    for (var optYear=(intThisYear-2); optYear<(intThisYear+2); optYear++) {

        Cal_HTML += "        <option value='"+optYear+"' ";

        if (optYear == intThisYear) Cal_HTML += " selected>\n";

        else Cal_HTML += ">\n";

        Cal_HTML += optYear+"</option>\n";

    }

    Cal_HTML += "    </select>";

    Cal_HTML += "   <a style='cursor:hand;' OnClick='parent.Show_cal("+intPrevYear+","+intPrevMonth+","+intThisDay+");'>◀</a> ";

    Cal_HTML += "<select name='selMonth' STYLE='font-size:11;' OnChange='parent.fnChangeYearD(calendar.selYear.value, calendar.selMonth.value, "+intThisDay+")';>";

    for (var i=1; i<13; i++) {    

        Cal_HTML += "        <option value='"+Month_Val[i-1]+"' ";

        if (intThisMonth == parseInt(Month_Val[i-1],10)) Cal_HTML += " selected>\n";

        else Cal_HTML += ">\n";

        Cal_HTML += Month_Val[i-1]+"</option>\n";

    }

    Cal_HTML += "    </select> ";

    Cal_HTML += "<a style='cursor:hand;' OnClick='parent.Show_cal("+intNextYear+","+intNextMonth+","+intThisDay+");'>▶</a>";

    Cal_HTML += "</td></tr>";

    Cal_HTML += "<tr align=center bgcolor='#87B3D6' style='color:#2065DA;' height='25'>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>일</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>월</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>화</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>수</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>목</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>금</font></td>";

    Cal_HTML += "    <td style='padding-top:3px;' width='24'><font color=black>토</font></td>";

    Cal_HTML += "</tr>";

        

    for (intLoopWeek=1; intLoopWeek < 7; intLoopWeek++) {    // 주단위 루프 시작, 최대 6주

        Cal_HTML += "<tr height='24' align=right bgcolor='white'>"

        for (intLoopDay=1; intLoopDay <= 7; intLoopDay++) {    // 요일단위 루프 시작, 일요일 부터

            if (intThirdWeekday > 0) {                                            // 첫주 시작일이 1보다 크면

                Cal_HTML += "<td>";

                intThirdWeekday--;

            } else {

                if (thirdPrintDay > intLastDay) {                                // 입력 날짝 월말보다 크다면

                    Cal_HTML += "<td>";

                } else {                                                                // 입력날짜가 현재월에 해당 되면

                    Cal_HTML += "<td onClick=parent.Calendar_Click(this); title="+intThisYear+"-"+day2(intThisMonth).toString()+"-"+day2(thirdPrintDay).toString()+" style=\"cursor:Hand;border:1px solid white;";

                    if (intThisYear == NowThisYear && intThisMonth==NowThisMonth && thirdPrintDay==intThisDay) {

                        Cal_HTML += "background-color:#C6F2ED;";

                    }

                    

                    switch(intLoopDay) {

                        case 1:                                                            // 일요일이면 빨간 색으로

                            Cal_HTML += "color:red;"

                            break;

                        //case 7:

                        //    Cal_HTML += "color:blue;"

                        //    break;

                        default:

                            Cal_HTML += "color:black;"

                            break;

                    }

                    Cal_HTML += "\">"+thirdPrintDay;

                }

                thirdPrintDay++;

                

                if (thirdPrintDay > intLastDay) {                                // 만약 날짜 값이 월말 값보다 크면 루프문 탈출

                    Stop_Flag = 1;

                }

            }

            Cal_HTML += "</td>";

        }

        Cal_HTML += "</tr>";

        if (Stop_Flag==1) break;

    }

    Cal_HTML += "</table></form></body></html></p>

<p>

 

</p>

<p><script language='javascript' src='./calendar.js'></script>

<input type="text" name="startdate" value='<?=$startdate?>' maxlength="10" size="10" class=input style="text-align:center;">

<input type="button" name="cmdStartDate" value="달력" class=button tabindex=11 onclick="Calendar_D(document.all.startdate)"></p>

<p>

 

안녕하세요.

ie에서는 클릭시 달력이 정상 적으로 표시되지만

edge나 chome에서는

245번째줄에서

var oPopBody = oPopup.document.body;

 

아래와 같은 에러가 표시됩니다.

혹시 document를 대체할수 있을까요?

typeerror : cannot read properties of undefined (reading 'document')

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

답변 1개

채택된 답변
+20 포인트
2년 전

url에서 콘솔을 찍어보는게 정확하겠지만

제 생각으로는 element.document.body가 ifrmae이 아니고서는 올바르지 않지 않나 생각들어요

로그인 후 평가할 수 있습니다

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

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

로그인