Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2021, 18:48
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

как изменить событие change на otinput ?
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    
    <link rel="stylesheet" href="http://cactus.lark.ru/Kalendar/css/kalendar.css">
  </head>
 
  <body>
    <div id="num_year">
      Календарь на
      <button class="year_minus">◀</button>
      <input id="year_input" type="number" size="4" value="" />
      <button class="year_plus">▶</button>
      год.<br />
      <button id="presently">сегодня</button>
    </div>
    <table id="table">
      <tr>
        <td class="td_month">
            <div id="January"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="February"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="March"></div>
            <table class="table_month"></table>
        </td>
      </tr>
      <tr>
        <td class="td_month">
            <div id="April"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="May"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="June"></div>
            <table class="table_month"></table>
        </td>
      </tr>
      <tr>
        <td class="td_month">
            <div id="July"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="August"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="September"></div>
            <table class="table_month"></table>
        </td>
      </tr>
      <tr>
        <td class="td_month">
            <div id="October"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="November"></div>
            <table class="table_month"></table>
        </td>
        <td class="td_month">
            <div id="December"></div>
            <table class="table_month"></table>
        </td>
      </tr>
    </table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var startDay = new Date(year, month, 1);
          var offsetDay = (startDay.getDay() || 7) - 1;
          startDay.setDate(startDay.getDate() - offsetDay);
          var lastDay = new Date(startDay);
          var days = new Date(year, month + 1, 0).getDate();
          days = Math.ceil((days + offsetDay) / 7) * 7;
          lastDay.setDate(lastDay.getDate() + days);
          this.data = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
          while (startDay < lastDay) {
            this.data.push(startDay.getDate());
            startDay.setHours(24);
          }
        },
        
        getCurDay: function(month, m, d, flag = false, flag2 = false) {
            var curDay;
            for (var i = 0; i < this.data.length; i++) {
            if (m === month) {
              if ((this.data[i] === 1 && flag) || flag2) {
                flag2 = true;
                continue;
              }
              if (this.data[i] === 1 || flag) {
                if (this.data[i] === d) curDay = i % 7;
                flag = true;
                continue;
              }
            }
          }
          return curDay;
        }, 
        
        render: function(month, name) {
          var html = ['<tr>', '<tr>', '<tr>', '<tr>', '<tr>', '<tr>', '<tr>'];
          var m = new Date().getMonth(),
            d = new Date().getDate(),
            flag = false,
            flag2 = false,
            curDay = this.getCurDay(month, m, d),
            className;
          
          for (var i = 0; i < this.data.length; i++) {
            if (i >= 0 && i <= 6) {
                if (i === curDay) html[i % 7] += '<td class="week-day curDay">' + this.data[i];
              else html[i % 7] += '<td class="week-day">' + this.data[i];
              continue;
            }
             
              if ((this.data[i] === 1 && flag) || flag2) {
                flag2 = true;
                className = "prevMonth";
                html[i % 7] += '<td class="' + className + '">' + this.data[i];
                continue;
              }
              
              if (this.data[i] === 1 || flag) {
                className = "curMonth";
                if (this.data[i] === d && m === month) {
                  className += " curDay";
                  document.querySelector(`#${name}`).classList.add('cur_month_name');
                }
                flag = true;
                html[i % 7] += '<td class="' + className + '">' + this.data[i];
                continue;
              } else {
                className = "prevMonth";
                html[i % 7] += '<td class="' + className + '">' + this.data[i];
                continue;
              }
              
              html[i % 7] += '<td class="prevMonth">' + this.data[i];
          }
          
          this.monthName.textContent = this.month;
          this.element.innerHTML = html.join('');
        }
      };
      
      var today = new Date(),
        thisYear = today.getFullYear(),
        thisMonth = today.getMonth(),
        months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        year_minus = document.querySelector('.year_minus'),
        year_plus = document.querySelector('.year_plus'),
        buttonToday = document.querySelector('#presently'),
        yearListener = document.querySelector('#year_input');
        yearListener.value = thisYear;
 
      function make(year = thisYear) {
        months.forEach((v, i) => {
          calendar.monthName = document.querySelector(`#${v}`);
          calendar.element = document.querySelectorAll('.table_month')[i];
          calendar.update(year, i);
          calendar.render(i, months[i]);
        });
      };
      make();
      buttonToday.classList.add('hide');
    
      year_plus.addEventListener('click', function() {
        yearListener.value = ++thisYear;
        if (yearListener.value == today.getFullYear()) buttonToday.classList.add('hide')
        else buttonToday.classList.remove('hide');
        make(thisYear);
      });
 
      year_minus.addEventListener('click', function() {
        yearListener.value = --thisYear;
        if (yearListener.value == today.getFullYear()) buttonToday.classList.add('hide')
        else buttonToday.classList.remove('hide');
        make(thisYear);
      });
      
      buttonToday.addEventListener('click', function() {
        thisYear = today.getFullYear();
        yearListener.value = thisYear;
        make(thisYear);
        buttonToday.classList.add('hide');
      });
      
      yearListener.addEventListener('change', function() {
        thisYear = yearListener.value;
        if (yearListener.value == today.getFullYear()) buttonToday.classList.add('hide')
        else buttonToday.classList.remove('hide');
        make(+yearListener.value);
      });
      
      const getMidnigth = () => Math.floor(new Date().setHours(24, 0, 0, 0) - new Date().getTime());
      
      let timer = setTimeout(function midUpdate() {
        console.log("r = " + new Date().getTime());
        buttonToday.classList.add('hide');
        thisYear = today.getFullYear();
        yearListener.value = thisYear;
        make(thisYear);
        timer = setTimeout(midUpdate, getMidnigth());
        },getMidnigth());
      
    </script>
  </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2021, 18:57
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

проблема в том что календарь меняет год только при нажатии на экран телефона, при потере фокуса у поля ввода ничего не изменяется, как сделать чтобы сразу при потере фокуса у поля ввода календарь менял год? а не после касания экрана телефона
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2021, 19:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Блондинка
как изменить событие change на otinput ?
в твоём вопросе ответ, найти change и заменить на input
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2021, 20:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Блондинка,
не надо быть такой самокритичной!!! главное правильно изначально локализовала проблему.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить значение Value Doc_Emmett Brown Opera, Safari и др. 5 05.10.2022 19:53
Эмулировать событие change pokk Общие вопросы Javascript 5 09.06.2018 11:48
Как изменить размер Canvas(самого холста)? Сергей16 Общие вопросы Javascript 2 13.07.2016 21:06
Как вставить в событие, указатель на объект, который получает это событие? Pacan228 Общие вопросы Javascript 2 04.07.2012 19:53
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40