我使用了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");
});
}
};
现在我们也在这里。单击框外单击时,日期选择器不会关闭。这种情况发生在任何浏览器中。
其他问题
我使用此(和许多其他人)来自动更正字段。在这种情况下输入大写。这在第一种形式上非常有效。但不是任何重复的表格。
$( “hoofdletters”)。KEYUP(函数(e)中 { $( “hoofdletters。 ”)VAL(($(“ hoofdletters。”)VAL())toUpperCase()。)。 });
当我使用uniqueName:true时,每个字段(也是重复的表单)都将得到验证。但是我的$ _POST名称都被重命名了。我想要originall字段名称,例如year []而不是ko_unique_1。删除uniqueName时有效,但重复的表单不再验证。
[2]:http://jsfiddle.net/QUxyy/5/ enter code here
答案 0 :(得分: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
元素