jquery-ui - 带有 jQ​​uery UI 拖放的 Knockout Js 在 IE8 中失败

标签 jquery-ui knockout.js jquery-ui-draggable jquery-ui-droppable knockout-2.0

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

IE8 error #1

SCRIPT5007: Unable to get value of the property 'options': object is null or undefined jquery-ui.1.8.18.js, line 1412 character 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 error #2

SCRIPT5007: Unable to get value of the property 'options': object is null or undefined jquery-ui.1.8.18.js, line 1439 character 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 问题还是我做错了什么?非常感谢任何对此的帮助。

最佳答案

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

我猜测 IE<9 以不同的方式处理分离的元素,导致错误出现。当明确不再需要关联的可拖动元素时(即当拖动停止时),可以通过仅从 observableArray 中删除学生来解决此问题。

这是更新后的 fiddle :http://jsfiddle.net/P9hns/32/

关于jquery-ui - 带有 jQ​​uery UI 拖放的 Knockout Js 在 IE8 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020538/

相关文章:

Jquery 对话框 'X' 图像未显示? A

javascript - 如何在页面刷新后使用jquery应用CSS(刷新前Assing the CSS)

javascript - jQuery - 在 Fancybox 中触发点击

javascript - 如何制作 jQuery UI 可放置列表,其中添加到列表中的元素也是放置目标

javascript - 获取删除的 div 的 ID 并隐藏所有其他没有此类的 div

jquery - 如何保留子 div 相对于其容器的偏移量

jquery - 我如何处理 Jquery 中的选中事件和单击事件

javascript - Knockout.JS 'enable' 长度条件绑定(bind)不起作用

javascript - knockout 应用绑定(bind)到从ajax mvc contrib网格动态加载的html

knockout.js - 现在当 jQuery.tmpl 被 knockout 时,Knockout 的默认模板引擎