3

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

我在 SE 的帮助下编辑了脚本以添加 jquery-ui 日期选择器。可以在 [这里][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(function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); });

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

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

4

2 回答 2

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

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

于 2012-12-06T14:32:03.767 回答
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 处理程序。需要根元素来限制 on 函数的 DOM 监视范围。理想情况下,这将是一个DIV元素

于 2012-12-06T15:41:08.573 回答