@valitskiydmitriy

Выполнение функции js на опредленной странице?

Есть вот такая функция:
window.onload = function () {
    var day = new Date,
        md = (new Date(day.getFullYear(), day.getMonth() + 1, 0, 0, 0, 0, 0)).getDate(),
        $month_name = "января февраля марта апреля мая июня июля августа сентября октября ноября декабря".split(" ");

    function set_select(a, c, d, e) {
        var el = document.getElementsByName(a)[0];
        for (var b = el.options.length = 0; b < c; b++) {
            el.options[b] = new Option(a == 'month' ? $month_name[b] : b + d, b + d);
         }
        el.options[e] && (el.options[e].selected = !0)
    }
    set_select("day", md, 1, day.getDate() - 1);
    set_select("month", 12, 1, day.getMonth());
    set_select("year", 50, day.getFullYear()-50, 50);


    var year = document.getElementById('year');
    var month = document.getElementById("month");

    function check_date() {
        var a = year.value | 0,
            c = month.value | 0;
        md = (new Date(a, c, 0, 0, 0, 0, 0)).getDate();
        a = document.getElementById("day").selectedIndex;
        set_select("day", md, 1, a)
    };

    if (document.addEventListener) {
        year.addEventListener('change', check_date, false);
        month.addEventListener('change', check_date, false);

    } else {
        year.detachEvent('onchange', check_date);
        month.detachEvent('onchange', check_date);
    }

}


На всех страницах кроме страницы регистрации ошибка
Cannot read property 'options' of undefined

По всякому пробовал запускать ее только на странице регистрации, никак не выходит, как лучше реализовать?
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Очевидно, что проблема в функции set_select - когда элемента с указанным именем нет на странице, она падает с ошибкой. Достаточно просто проверять существование элемента:
function set_select(a, c, d, e) {
    var el = document.getElementsByName(a)[0];

    if (!el) {
        console.warn('Element "' + a + '" not found');
        return;
    }

    for (var b = el.options.length = 0; b < c; b++) {
        el.options[b] = new Option(a == 'month' ? $month_name[b] : b + d, b + d);
    }

    el.options[e] && (el.options[e].selected = !0)
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы