Я использую библиотеку Knockout JS для привязки элементов управления вводом HTML5 в моем веб-приложении, которое предназначено для работы на iPad (iOS5, Safari 5.1). Привязка отлично работает для типов ввода, таких как текст и выберите, но не для даты. После выбора значения даты с помощью средства выбора даты оно не привязывается к свойству viewModel (фактически не сохраняется).
Вот так выглядит мой HTML.
<input id="dob" name="dob" type="date" data-bind="value: dob" />
Я попытался обойти пользовательскую привязку, где я инициализировал обработчик события изменения.
ko.bindingHandlers.datePicker = {
init: function (element, valueAccessor) {
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).val());
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).val(value);
}
};
Изменение HTML-кода на -
<input id="dob" name="dob" type="date" data-bind="datePicker: dob" />
Странно, даже это событие не стреляет. Обратите внимание, что в обоих сценариях привязка происходит идеально в Windows XP в браузерах Opera и Safari.
В конце концов, я получил решение своей проблемы, используя событие «blur» вместо «change» в пользовательской привязке. Теперь вызывается обработчик событий, и я вручную устанавливаю значение из элемента управления датой.
Теперь мой вопрос: это то, что я делаю неправильно, и если нет, то почему не срабатывает событие изменения элемента управления датой HTML5, по умолчанию или через пользовательское связывание? Я хочу, чтобы контроль даты работал так, как он должен.