Knockout.js с jquery ui datepicker работает везде, кроме IE
Я использовал шаблон knockout.js для создания формы, которая может быть дублирована и удалена. Скрипку можно найти здесь.
Я редактировал script с помощью litle help из SE, чтобы добавить jquery-ui datepicker. Краткую версию скрипки можно найти здесь [здесь] [2]. Пока все хорошо, но при тестировании я узнал, что все работает в любом браузере, кроме IExplorer (различные версии).
Проблема в этой конкретной части, но я не знаю, где.
script type='text/javascript'>//<![CDATA[
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || {};
console.log("datepicker");
$(element).datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).datepicker("getDate"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).datepicker("destroy");
});
}
};
И теперь мы на нем. Датчик даты не закрывается, когда вы выходите за пределы поля. Это происходит в любом браузере.
Дополнительные вопросы
-
Я использую это (и многие другие) для автокоррекции поля. В этом случае введите верхний регистр ввода. Это отлично работает в первой форме. Но не в каких-либо повторяющихся формах.
$( "hoofdletters" ). KeyUp (функция (е)
{ $ ( "Hoofdletters" ) Вал (($ ( "hoofdletters".) Вал()) toUpperCase()..).
});
-
Когда я использую uniqueName: true, каждое поле (также дублированные формы) будет проверено. Но мои имена $_POST переименованы. Мне бы хотелось, чтобы имена полей исходного поля, например year [], вместо ko_unique_1. Работает при удалении uniqueName, но затем дублированные формы больше не проверяются.
[2]: http://jsfiddle.net/QUxyy/5/ enter code here
Ответы
Ответ 1
- Чтобы заставить код работать в IE: удалить инструкцию "console.log"
-
Чтобы изменить формат даты, вы можете определить привязку, подобную этой:
data-bind = 'datepicker: beschikkingsdatum, datepickerOptions: {dateFormat: "dd/mm/yy" }, uniqueName: true'
Ответ 2
2 вещи:
как я уже сказал в комментариях, используйте window.console.log(или функцию-обертку) вместо console.log, чтобы предотвратить ошибки в старых браузерах, которые не знают объект консоли.
Я использую это (и многие другие) для автокоррекции поля. В этом случае введите верхний регистр ввода. Это отлично работает в первой форме. Но нет на любые повторяющиеся формы.
заменить:
$(".hoofdletters").keyup(function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); });
с:
$(".hoofdletters").on('keyup', '#<some root element>', function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); });
таким образом вы гарантируете, что будущие элементы получат обработчик keyup
Корневой элемент необходим для ограничения области контроля DOM для функции on. В идеале это будет элемент DIV