我正在使用joutery drag& amp;它可以在Chrome,Firefox,IE9中运行良好但不适用于IE8。我无法发布实际的代码,但我创建了一个jsfiddle示例,可以重现错误。请看一下http://jsfiddle.net/wired1/P9hns/20/ 它在最新的Firefox,Chrome和IE9中运行良好。但是在IE8中尝试拖动时出现以下错误:
IE8错误#1
SCRIPT5007:无法获取属性“options”的值:object为null或undefined jquery-ui.1.8.18.js,第1412行第13个字符
以下是jquery ui中引用的代码:
$.ui.plugin.add("draggable", "cursor", {
start: function(event, ui) {
var t = $('body'), o = $(this).data('draggable').options;
if (t.css("cursor")) o._cursor = t.css("cursor");
t.css("cursor", o.cursor);
},
stop: function(event, ui) {
var o = $(this).data('draggable').options;
if (o._cursor) $('body').css("cursor", o._cursor);
}
});
这是停止函数中变量o的声明: var o = $(this).data('draggable')。options;
如果我在jquery ui中注释掉这两行,我会收到以下错误:
IE8错误#2
SCRIPT5007:无法获取属性“options”的值:object为null或undefined jquery-ui.1.8.18.js,第1439行,第38字符
指出:
$.ui.plugin.add("draggable", "scroll", {
start: function(event, ui) {
var i = $(this).data("draggable");
if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
},
drag: function(event, ui) {
var i = $(this).data("draggable"), o = i.options, scrolled = false;
........................
这是上述代码段的最后一行 o = i.options 。
如果我将{scroll:false}设置为jqueryui draggable的选项,则错误消失,但它仍然无效。
似乎当我开始拖动所有事件时,即使没有释放鼠标单击也会依次触发(当在jsfiddle中运行代码测试时,请查看控制台以查看日志)。
这是一个jquery ui问题还是我做错了什么?非常感谢任何帮助。
答案 0 :(得分:2)
问题是您在'start'回调中从observableArray
中移除了学生,这反过来导致KO删除/分离关联的DOM元素。但是draggable的代码依赖于被拖动的元素仍然可用(即使你指定了一个帮助器)。
我猜测IE< 9以不同的方式处理分离的元素,导致错误浮出水面。只有在明确不再需要关联的可拖动元素时(即拖动停止时),才能通过仅从observableArray
移除学生来解决此问题。
这是更新的小提琴:http://jsfiddle.net/P9hns/32/