Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   отмена события. - Отключить стрелку в календаре на прошлые дни (https://javascript.ru/forum/dom-window/78991-otmena-sobytiya-otklyuchit-strelku-v-kalendare-na-proshlye-dni.html)

miltorg 03.12.2019 11:26

отмена события. - Отключить стрелку в календаре на прошлые дни
 
отмена события. - Отключить стрелку в календаре на прошлые дни

Сделал, но как то слишком много кода:

<script>
	
function levStrelkacalendar0(){
  god = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.year;
  mes = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.month;
  prishla = new Date(god,mes).getTime();
  
  if(prishla > Date.now()) {
    document.querySelector('#calendar0 thead tr:nth-child(1) td:nth-child(1)').onclick = function() {
      
      god = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.year;
      mes = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.month;
      prishla = new Date(god,mes).getTime();
      if(prishla > Date.now()) {
        Calendar2("calendar0", document.querySelector('#calendar0 thead td:nth-child(2)').dataset.year,
          parseFloat(document.querySelector('#calendar0 thead td:nth-child(2)').dataset.month)-1,
          '20191229 20191231 20200101 20200102 20191130 20191201 20191202', '20200103 20191203', '20191228 20191129', '20191230');
        }else document.querySelector('#calendar0 thead tr:nth-child(1) td:nth-child(1)').onclick = null;	 
	
  }
	}else document.querySelector('#calendar0 thead tr:nth-child(1) td:nth-child(1)').onclick = null;	 
		 
}

		
Calendar2("calendar0", new Date().getFullYear(), new Date().getMonth(),
  '20191229 20191231 20200101 20200102 20191130 20191201 20191202', '20200103 20191203', '20191228 20191129', '20191230');
  
  document.querySelector('#calendar0 thead tr:nth-child(1) td:nth-child(3)').onclick = function() {
    Calendar2("calendar0", document.querySelector('#calendar0 thead td:nth-child(2)').dataset.year,
    parseFloat(document.querySelector('#calendar0 thead td:nth-child(2)').dataset.month)+1,
     '20191229 20191231 20200101 20200102 20191130 20191201 20191202', '20200103 20191203', '20191228 20191129', '20191230');
    
    levStrelkacalendar0();
    }
  
  


		
		
</script>

miltorg 03.12.2019 11:28

Для такой, казалось бы простой штуки - отменить работу стрелки при прошедших датах в календаре.

Целиком:
http://dom.onl/u/u8.php

Может есть что проще того, что я написал?
Спасибо.

ksa 03.12.2019 12:20

Цитата:

Сообщение от miltorg
слишком много кода

Начни с того, что не пиши длинные одинаковые "последовательности"... ;)
Цитата:

Сообщение от miltorg
  god = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.year;
  mes = document.querySelector('#calendar0 thead td:nth-child(2)').dataset.month;

Можно заменить, хотя бы, на
var o=document.querySelector('#calendar0 thead td:nth-child(2)').dataset
god = o.year;
mes = o.month;

А у тебя эта конструкция встречается не раз. :(
Сам селектор так же можно записать в некую переменную...

miltorg 03.12.2019 13:50

Не про то. Это всё понятно и так.
Там должна быть в корне другая идея.
Или воплощение.

Задача в 3 слова - убрать стрелку на прошедшие дни

А воплощение - 50 строк кода.

miltorg 03.12.2019 13:52

Или я, как всегда, сам того не ведая - написал оптимальный код :-)

ksa 03.12.2019 14:00

Цитата:

Сообщение от miltorg
Это всё понятно и так.

Тогда почему не реализовано? :D

miltorg 03.12.2019 14:46

Потому что мне мой подход кажется в корне не верным.

Зачем вылизывать код который возможно пойдёт в корзину?

ksa 03.12.2019 15:00

Цитата:

Сообщение от miltorg
Зачем вылизывать код который возможно пойдёт в корзину?

Нужно отрабатывать у себя привычку сразу писать более удобный код. ;)
А не переписывать его еще раз, после того как понравится "подход"...

miltorg 03.12.2019 15:03

Этот код никто не писал - был прототип.


Часовой пояс GMT +3, время: 01:09.