Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблема с SetTimeOut оповещением (https://javascript.ru/forum/dom-window/78240-problema-s-settimeout-opoveshheniem.html)

Temax 14.08.2019 15:39

Проблема с SetTimeOut оповещением
 
Здравствуйте, хочу сделать напоминание на сайте, где время оповещения выбирает пользователь, но SetTimeOut не отрабатывает как надо, я хотел достать время через поля number, потом перевести все в часы и установить delay для SetTimeOut

Вот код:

<input class = "mt-3" type="button" value = "Напомнить мне" onclick = "notifSet()">
  <br>
  <label for="">Day:
  <input name = "day" min = "0" max = "30" type="number">
  </label>
  <label for="">Hour:
  <input name = "hour" min = "0" max = "24" type="number">
  </label>
  <label for="">Minute:
  <input name = "minute" min = "0" max = "60" type="number">
  </label>
  <label for="">Seconde:
  <input name = "seconde" min = "0" max = "60" type="number">
  </label>


function notifyMe () {
  	var notification = new Notification ("ToDo List App", {
  		tag : "ache-mail",
  		body : "Вам пришло уведомление",
  	});
  }


  function notifSet () {
    var day = document.getElementsByName("day").value;
    var hour = document.getElementsByName("hour").value;
    var minute = document.getElementsByName("minute").value;
    var seconde = document.getElementsByName("seconde").value;
    day = parseFloat(day);
    hour = parseFloat(hour);
    minute = parseFloat(minute);
    seconde = parseFloat(seconde);
    if(hour === 24){
      day++;
    }
    if(minute === 60){
      hour++;
    }
    if(seconde === 60){
      minute++;
    }

    day = day * 24;
    minute = minute / 60;
    seconde = seconde / 3600;
    var sum = day + minute + hour + seconde;
    var res = sum * 3600000;
  	if (!("Notification" in window))
  		alert ("Ваш браузер не поддерживает уведомления.");
  	else if (Notification.permission === "granted")
  		setTimeout(notifyMe, res);
  	else if (Notification.permission !== "denied") {
  		Notification.requestPermission (function (permission) {
  			if (!('permission' in Notification))
  				Notification.permission = permission;
  			if (permission === "granted")
  				setTimeout(notifyMe, res);
  		});
  	}
  }

ksa 14.08.2019 15:50

Temax, тебе нужно просто перевести все в миллисекунды...
Зачем ты делаешь все эти лишние вычисления и сравнения?
Просто умножь дни на количество в них миллисекунд... Потом аналогично поступи с часами, минутами и секундами...
Потом все сложи - это и есть нужная пауза. ;)

Temax 14.08.2019 16:23

Спасибо Вам за помощь, все заработало, да я реально ступил, что можно было сразу в миллисекунды перевести и еще не срабатывало потому что getElementsByName было. я поставил ById и все сработало!:dance:


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