使用jquery ui datepicker的Knockout.js可以在IE以外的任何地方使用

时间:2012-12-06 13:08:20

标签: jquery jquery-ui internet-explorer knockout.js datepicker

我使用了knockout.js templatescript来创建一个可以复制和删除的表单。可以找到小提琴here

我使用SE的litle帮助编写脚本以添加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");
        });

    }
};

现在我们也在这里。单击框外单击时,日期选择器不会关闭。这种情况发生在任何浏览器中。

其他问题

  1. 我使用此(和许多其他人)来自动更正字段。在这种情况下输入大写。这在第一种形式上非常有效。但不是任何重复的表格。

    $( “hoofdletters”)。KEYUP(函数(e)中 {    $( “hoofdletters。 ”)VAL(($(“ hoofdletters。”)VAL())toUpperCase()。)。 });

  2. 当我使用uniqueName:true时,每个字段(也是重复的表单)都将得到验证。但是我的$ _POST名称都被重命名了。我想要originall字段名称,例如year []而不是ko_unique_1。删除uniqueName时有效,但重复的表单不再验证。

    [2]:http://jsfiddle.net/QUxyy/5/ enter code here

2 个答案:

答案 0 :(得分:2)

  1. 使代码在IE上运行:删除“console.log”指令
  2. 要更改日期格式,您可以定义类似这样的绑定:

    data-bind ='datepicker:beschikkingsdatum, datepickerOptions:{dateFormat:“dd / mm / yy”} ,uniqueName:true'

答案 1 :(得分:2)

2件事:

像我在评论中所说的那样,使用window.console.log(或包装函数)而不是console.log来防止不知道控制台对象的旧浏览器出错。

  

我使用此(和许多其他人)来自动更正字段。在这种情况下   大写输入。这在第一种形式上非常有效。但不是   在任何重复的表格上。

取代:

$(".hoofdletters").keyup(function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); });

with:

$(".hoofdletters").on('keyup', '#<some root element>', function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); });

这样你可以保证未来的元素会收到keyup处理程序 需要root元素来限制on函数的DOM监视范围。理想情况下,这将是DIV元素