由于我已经切换到JQuery 2.0,因此破坏了jQuery UI(1.10.2)Datepickers。
似乎是修改jquery.each()函数的问题。
我关注
$(this.el_picker).datepicker('destroy');
它在JQuery UI 第9605行
中调用return this.each(function() {
typeof options === "string" ?
$.datepicker["_" + options + "Datepicker"].
apply($.datepicker, [this].concat(otherArgs)) :
$.datepicker._attachDatepicker(this, options);
});
然后它在 Jquery.each()函数中调用以下函数:
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
}
这与旧版JQuery的区别
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
}
然后转到JQuery UI 第7922行
_destroyDatepicker: function(target) {
var nodeName,
$target = $(target),
inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
nodeName = target.nodeName.toLowerCase();
$.removeData(target, PROP_NAME);
if (nodeName === "input") {
inst.append.remove();
抛出错误:
未捕获的TypeError:无法读取未定义的属性'append'
有什么想法吗?是兼容性错误吗?怎么解决?或者我做错了。
答案 0 :(得分:10)
我发现修复此问题的一种方法是假设您要重置日期选择器:
$(".hasDatepicker").removeClass("hasDatepicker");
$(".datepicker").datepicker("destroy");
$(".datepicker").datepicker();
答案 1 :(得分:3)
当你在具有类的输入上调用destroy时,通常会发生这种情况,但是还没有调用datepicker()。例如:
..input class="dp" />
如果您尚未拨打$(".dp").datepicker()
并尝试拨打$(".dp").datepicker("destroy")
,则会收到此错误消息。当您动态添加其中一个行字段为datepicker输入的行时,也会发生这种情况。在这种情况下,代码序列应为:
$(".dp").datepicker("destroy");
// code to add row dynamically
.....
$(".dp").datepicker();
答案 2 :(得分:1)
迟到了,但是我删除了破坏功能并使其正常工作。与您的示例不完全相同,但这可以从JSFiddle
中找到并删除了knoukout清理以获得此解决方案:
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
var $el = $(element);
//initialize datepicker with some optional options
var options = { minDate: 0
};
$el.datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
var observable = valueAccessor();
observable($el.datepicker("getDate"));
});
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
$el = $(element),
current = $el.datepicker("getDate");
if (value - current !== 0) {
$el.datepicker("setDate", value);
}
}
};
我认为问题是jquery不应该被强制销毁datepicker,当我删除它时,我可以刷新页面而不用
Uncaught TypeError: Cannot read property 'append' of undefined
错误
答案 3 :(得分:-1)
我遇到了同样的问题,我找到了另一个解决方案,提到在jquery和jqueryui引用下添加以下脚本引用:
<script src="http://code.jquery.com/jquery-migrate-1.1.1.js"></script>
这适用于我的datepicker问题。