it-swarm.com.ru

Mobile Safari (10.3.1) DateTime-Local Ошибка ввода правильного значения

Я получаю сообщение об ошибке в новых версиях iOS Mobile Safari. Эта ошибка не произошла до версии 10.3 iOS. Может ли кто-нибудь указать мне правильное направление?

Вот необработанный HTML-код и приложенный вид проверенного и мобильного устройства (iPhone 7).

Inspector View iPhone 7 View

8
Mark Tomlin

Простое решение!

IOS требует, чтобы значение было установлено в поле ввода с типом "datetime-local".

Пример: <input type="datetime-local" value="2000-07-01T12:00" />

Это оно :)

Мне лично приятно установить значение по умолчанию для текущего местного времени пользователя. Это должно быть отформатировано в ISOTime без секунд, поэтому код для этого может быть что-то вроде:

// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);

// select the "datetime-local" input to set the default value on
var dtlInput = document.querySelector('input[type="datetime-local"]');

// set it and forget it ;)
dtlInput.value = localISOTime.slice(0,16);
4
Frank Turano

Это сообщение вызывается проверкой на стороне клиента. Если вы не используете проверку на стороне клиента, я обнаружил, что вы можете решить эту проблему, отключив ее с помощью атрибута novalidate следующим образом:

<form action="/myaction" method="POST" novalidate>
4
Matt

Кажется, это ошибка в Safari, но вы можете пропустить ее, используя javascript для отправки формы.

$("#new_apply_form").submit();
3
Eric Guo

Это ошибка в Safari. Вы должны использовать JS для отправки формы.

JS: form.submit();

1
Joshua

Для кого все еще борются с IOS datetime-local такой же как я.

Это вызвано тем, что IOS устанавливает значение datetime-local в недопустимом формате, когда атрибут/свойство value не задано или задано недопустимым.

<input type='datetime-local' onChange='alert(event.target.value)'>

Это предупредит с форматом 'yyyy-MM-ddThh: mm: ss', таким как 2018-12-25T12: 00: 00, который имеет недопустимую строку секунд.

Чтобы обойти это, просто установите значение в правильной форме.

const onChange = (event) => {
    event.target.value = event.target.value.substr(0, 16);
}

Вот и все.

0
NamHoon Jung