2

我正在使用带有 jquery 拖放的 knockoutjs,它在 Chrome、Firefox、IE9 中运行良好,但在 IE8 中运行良好。我无法发布实际代码,但我创建了一个可以重现错误的 jsfiddle 示例。请查看http://jsfiddle.net/wired1/P9hns/20/ 它在最新的 Firefox、Chrome 和 IE9 中运行良好。但是在 IE8 中尝试拖动时出现以下错误:

IE8 错误 #1

SCRIPT5007:无法获取属性“选项”的值:对象为空或未定义 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);

}
});

就是stop函数中变量o的声明:var o = $(this).data('draggable').options;

如果我在 jquery ui 中注释掉这两行,我会收到以下错误:

IE8 错误 #2

SCRIPT5007:无法获取属性“选项”的值:对象为 null 或未定义 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 可拖动的选项,错误就会消失,但它仍然不起作用。

似乎当我开始按顺序拖动所有事件时,即使未释放鼠标单击(在 jsfiddle 中运行代码测试时,请查看控制台以查看日志)。

是 jquery ui 问题还是我做错了什么?对此的任何帮助将不胜感激。

4

1 回答 1

2

问题是您从observableArray“开始”回调中删除了学生,这反过来又导致 KO 删除/分离关联的 DOM 元素。但是 draggable 的代码指望被拖动的元素仍然可用(即使您指定了帮助器)。

我猜 IE<9 以不同的方式处理分离的元素,导致错误浮出水面。它可以通过仅在observableArray确定不再需要关联的可拖动元素时(即拖动停止时)将学生从 中删除来解决。

这是更新的小提琴:http: //jsfiddle.net/P9hns/32/

于 2012-06-14T01:44:05.460 回答