Почему это не работает как в IE, так и в Chrome. Таблица выглядит правильно только в Chrome? - PullRequest
0 голосов
/ 12 сентября 2018

Итак, у меня есть какой-то код, который я пытаюсь использовать в chrome, когда я узнал, что мне также нужно, чтобы он работал в Internet Explorer ... Может кто-нибудь подсказать мне, как заставить его полностью функционировать в IE?

Я знаю, что у него может быть свой собственный код, который я бы сделал функциональным ... если бы я знал, почему IE неправильно форматировал таблицу и не помещал строки для каждого 7

<div id="calendar"></div>
<script>
    function calendar(month) {

        //Variables to be used later.  Place holders right now.
        var padding = "";
        var totalFeb = "";
        var i = 1;
        var testing = "";

        var current = new Date();
        var cmonth = current.getMonth(); // current (today) month
        var day = current.getDate();
        var year = current.getFullYear();
        var tempMonth = month + 1; //+1; //Used to match up the current month with the correct start date.
        var prevMonth = month - 1;

        //Determing if Feb has 28 or 29 days in it.  
        if (month == 1) {
            if ((year % 100 !== 0) && (year % 4 === 0) || (year % 400 === 0)) {
                totalFeb = 29;
            } else {
                totalFeb = 28;
            }
        }

        // Setting up arrays for the name of the months, days, and the number of days in the month.
        var monthNames = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
        var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thrusday", "Friday", "Saturday"];
        var totalDays = ["31", "" + totalFeb + "", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"];

        // Temp values to get the number of days in current month, and previous month. Also getting the day of the week.
        var tempDate = new Date(tempMonth + ' 1 ,' + year);
        var tempweekday = tempDate.getDay();
        var tempweekday2 = tempweekday;
        var dayAmount = totalDays[month];

        // After getting the first day of the week for the month, padding the other days for that week with the previous months days.  IE, if the first day of the week is on a Thursday, then this fills in Sun - Wed with the last months dates, counting down from the last day on Wed, until Sunday.
        while (tempweekday > 0) {
            padding += "<td class='premonth'></td>";
            //preAmount++;
            tempweekday--;
        }
        // Filling in the calendar with the current month days in the correct location along.
        while (i <= dayAmount) {

            // Determining when to start a new row
            if (tempweekday2 > 6) {
                tempweekday2 = 0;
                padding += "</tr><tr>";
            }

            // checking to see if i is equal to the current day, if so then we are making the color of that cell a different color using CSS. Also adding a rollover effect to highlight the day the user rolls over. This loop creates the actual calendar that is displayed.
            if (i == day && month == cmonth) {
                padding += "<td class='currentday("+ i + ")'   onMouseOver='this.style.background=\"#00AA00\"; this.style.color=\"#FFFFFF\"' onMouseOut='this.style.background=\"aqua\"; this.style.color=\"black\"'>" + i + "</td>";
            } else {
                padding += "<td id='currentmonth("+ i +")' class='currentmonth' onclick='DaySelection(" + i + ");' onMouseOver='this.style.background=\"#00FF00\"' onMouseOut='this.style.background=\"#FFFFFF\"'>" + i + "</td>";
            }
            tempweekday2++;
            i++;
        }


        // Outputing the calendar onto the site.  Also, putting in the month name and days of the week.
        var calendarTable = "<table class='calendar'> <tr class='currentmonth'><th colspan='7'>" + monthNames[month] + " " + year + "</th></tr>";
        calendarTable += "<tr class='weekdays'>  <td>Sun</td>  <td>Mon</td> <td>Tues</td> <td>Wed</td> <td>Thurs</td> <td>Fri</td> <td>Sat</td> </tr>";
        calendarTable += "<tr>";
        calendarTable += padding;
        calendarTable += "</tr></table>";
        document.getElementById("calendar").innerHTML += calendarTable;
    }

    function go12() {
        var my_date = new Date();
        alert(my_date.getMonth());
        var MonthOFYear = my_date.getMonth();
        calendar(MonthOFYear);

    }

    if (window.addEventListener) {
        window.addEventListener('load', go12, false);
    } else if (window.attachEvent) {
        window.attachEvent('onload', go12);
    }

    function DaySelection(a) {
        var selection = document.getElementById('currentmonth(' + a + ')').textContent;
        alert(selection);
    }

</script>

1 Ответ

0 голосов
/ 15 сентября 2018

var tempDate = new Date(tempMonth + ' 1 ,' + year)

Это проблемная строка, поскольку в IE 11 это недопустимая дата.Из-за этого позже в вашем цикле for

 if (tempweekday2 > 6) {
     tempweekday2 = 0;
     padding += "</tr><tr>";
 }

tempweekday2 не является числом, поэтому он никогда не будет вводить оператор if, поэтому новая строка никогда не будет создана.

Чтобы избежать этого, вы всегда должны форматировать свой код в соответствии с RFC 2822 или ISO 8601, чтобы избежать этих ошибок.

В вашем конкретном случае вы можете решить проблему, заменив

var tempDate = new Date(tempMonth + ' 1 ,' + year)

на:

var tempDate = new Date(tempMonth + '-1-' + year)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...