Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Input type="time" + JS +Safari (iPhone) (https://javascript.ru/forum/css-html-browser/65030-input-type%3D-time-js-safari-iphone.html)

dpts 21.09.2016 07:24

Input type="time" + JS +Safari (iPhone)
 
Приветствую:
Есть HTML кусок формы
<div class="row">
					<div class="col-sm-12">
						Перезвоните мне пожалуйста <span id="when"></span><input type="hidden" id="cday" name="cday" value="">
					</div>
				</div>
				<div class="row">
					<div class="col-sm-6">
						<div class="form-group">
							с&nbsp;<input type="time" id="timestart" name="timestart" class="form-control" required="required" min="" max="22:00" step="1" value="">
						</div>
					</div>
					<div class="col-sm-6">
						<div class="form-group">
							до&nbsp;<input type="time" id="timeend" name="timeend" class="form-control" required="required" min="" max="22:00" step="1" value="">
						</div>
					</div>
				</div>


к нему есть скрипт
<script>
	//какое послезавтра будет число?
	var b = new Date();
		b.setDate(b.getDate()+2);
		atday = b.getDate();
		atmonth = b.getMonth() + 1;
		atyear = b.getFullYear();
		aTomorrowСall = (atday + "." + (atmonth < 10 ? "0" + atmonth : atmonth) + "." + atyear + "г.");
		
	//какое завтра будет число и день недели?
	var a = new Date();
		a.setDate(a.getDate()+1);
		tday = a.getDate();
		tmonth = a.getMonth() + 1;
		tyear = a.getFullYear();
		TomorrowСall = (tday + "." + (tmonth < 10 ? "0" + tmonth : tmonth) + "." + tyear + "г.");
		TomorrowWeekDay = a.getDay();
	//А сегодня какое число и день недели?
	var d = new Date();
		day = d.getDate();
		month = d.getMonth() + 1;
		year = d.getFullYear();
		TodayCall = (day + "." + (month < 10 ? "0" + month : month) + "." + year +"г.");
		TodayWeekDay = d.getDay();
	//Начало и Конец рабочего дня
	var wdstart = 8;
	var wdend = 18;
	var lasthour = wdend - 1;
	//Текущее время
	var totalSec = new Date().getTime() / 1000;
	var hours = parseInt( totalSec / 3600 ) % 24+4;
	var hoursend = hours + 1;
	var minutes = parseInt( totalSec / 60 ) % 60;
	//Начало перида времени звонка
	var tstart = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes);
	//Конец перида времени звонка
	var tend = (hoursend < 10 ? "0" + hoursend : hoursend) + ":" + (minutes < 10 ? "0" + minutes : minutes);
	
	//Если сейчас рабочее время
	if (hours >= wdstart) {
		if (hours < wdend) {
			//Если сегодня воскресение
			if (TodayWeekDay = 0) {
				//Показываем, что пользователь заказывает звонок на завтра
				when.innerHTML = ('завтра ' + TomorrowСall);
				//Устанавливаем дату звонка - завтра
				cday.setAttribute('value', TomorrowСall);
				//Унавливаем значения для начала периода звонка
				timestart.setAttribute('min', '08:00');
				timestart.setAttribute('value', '08:00');
				//Унавливаем значения для конца периода времени звонка
				timeend.setAttribute('min', '09:00');
				timeend.setAttribute('value', '22:00');
			}
			else {
					//А вдруг запрос звонка происходит в последние 10 минуты рабочего времени
					if (hours >= lasthour) {
						if (minutes > 50) {
							//А вдруг это последние рабочие минуты субботы?
							if (TodayWeekDay = 6) {
								//Показываем, что пользователь заказывает звонок на послезавтра
								when.innerHTML = ('завтра ' + аTomorrowСall);
								//Устанавливаем дату звонка - послезавтра
								cday.setAttribute('value', аTomorrowСall);
								//Унавливаем значения для начала периода звонка
								timestart.setAttribute('min', '08:00');
								timestart.setAttribute('value', '08:00');
								//Унавливаем значения для конца периода времени звонка
								timeend.setAttribute('min', '09:00');
								timeend.setAttribute('value', '22:00');
							}
							else {
									//Показываем, что пользователь заказывает звонок на завтра
									when.innerHTML = ('завтра ' + TomorrowСall);
									//Устанавливаем дату звонка - завтра
									cday.setAttribute('value', TomorrowСall);
									//Унавливаем значения для начала периода звонка
									timestart.setAttribute('min', '08:00');
									timestart.setAttribute('value', '08:00');
									//Унавливаем значения для конца периода времени звонка
									timeend.setAttribute('min', '09:00');
									timeend.setAttribute('value', '22:00');	
							}
						}
					}
					else {
						//Устанавливаем дату звонка - сегодня
						cday.setAttribute('value', TodayCall);
						//Унавливаем значения для начала периода звонка
						timestart.setAttribute('min', tstart);
						timestart.setAttribute('value', tstart);
						//Унавливаем значения для конца периода времени звонка
						timeend.setAttribute('min', tend);
						timeend.setAttribute('value', tend);
					}
			}
		}
	}
	
	
	//Если рабочее время еще не началось
	if (hours < wdstart) {
		//Если сегодня воскресение
		if (TodayWeekDay = 0) {
			//Показываем, что пользователь заказывает звонок на завтра
			when.innerHTML = ('завтра ' + TomorrowСall);
			//Устанавливаем дату звонка - завтра
			cday.setAttribute('value', TomorrowСall);
			//Унавливаем значения для начала периода звонка
			timestart.setAttribute('min', '08:00');
			timestart.setAttribute('value', '08:00');
			//Унавливаем значения для конца периода времени звонка
			timeend.setAttribute('min', '09:00');
			timeend.setAttribute('value', '22:00');
		}
		else {
			//Устанавливаем дату звонка - сегодня
			cday.setAttribute('value', TodayCall);
			//Унавливаем значения для начала периода звонка
			timestart.setAttribute('min', '08:00');
			timestart.setAttribute('value', '08:00');
			//Унавливаем значения для конца периода времени звонка
			timeend.setAttribute('min', '09:00');
			timeend.setAttribute('value', '22:00');
		}
	}
	//Если рабочее время уже закончилось
	if (hours >= wdend) {
		//А вдруг сегодня суббота?
		if (TodayWeekDay = 6) {
			//Показываем, что пользователь заказывает звонок на послезавтра
			when.innerHTML = ('завтра ' + аTomorrowСall);
			//Устанавливаем дату звонка - послезавтра
			cday.setAttribute('value', аTomorrowСall);
			//Унавливаем значения для начала периода звонка
			timestart.setAttribute('min', '08:00');
			timestart.setAttribute('value', '08:00');
			//Унавливаем значения для конца периода времени звонка
			timeend.setAttribute('min', '09:00');
			timeend.setAttribute('value', '22:00');
		}
		else {
			//Показываем, что пользователь заказывает звонок на завтра
			when.innerHTML = ('завтра ' + TomorrowСall);
			//Устанавливаем дату звонка - завтра
			cday.setAttribute('value', TomorrowСall);
			//Унавливаем значения для начала периода звонка
			timestart.setAttribute('min', '08:00');
			timestart.setAttribute('value', '08:00');
			//Унавливаем значения для конца периода времени звонка
			timeend.setAttribute('min', '09:00');
			timeend.setAttribute('value', '22:00');
		}
}
</script>

который устанавливает значения для полей, в зависимости от того какой день недели и текущего времени.

Все отлично работает во всех браузерах, кроме Safari на iphone, он игнорит javascript, игнорит атрибуты min и maх. Как можно его победить?

И еще один БАГ с Хромом на Андроиде - скрипт работает, он вроде-как все значения атрибутов устанавливает, но установленное скриптом значение value не отображает (надо обязательно тыкнуться в поле и «подтвердить»).
Может есть знающие люди, подскажите, как это дело исправить?


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