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

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

我使用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. 我使用这个(和许多其他人)来自动更正字段。 在这种情况下输入大写。 这在第一种forms上非常有效。 但不是任何重复的表格。

    $(“。hoofdletters”)。keyup(function(e){$(“。hoofdletters”)。val(($(“。hoofdletters”)。val())。toUpperCase());});

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

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

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

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

2件事:

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

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

更换:

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

用:

 $(".hoofdletters").on('keyup', '#', function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); }); 

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