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