【问题标题】:JQuery nested sortable chrome issuesJQuery 嵌套的可排序 chrome 问题
【发布时间】:2016-12-02 07:21:31
【问题描述】:

我一直在使用 Johnny's extended jquery sortable 开发类似文件树的小部件,它比标准 JQuery 更好地处理嵌套排序。

我在使用新数据重新初始化树时遇到问题。火狐没有问题,但是chrome起作用了。 A minimal example can be seen here(或on jsfiddle here)

在 onDrop 回调中,树被重新初始化。为简洁起见,所发生的只是console.log,但在我的实际示例中,数据正在通过 ajax 发布到服务器,并且响应具有用于更新树的新数据。

所以,Firefox 对这个解决方案很满意,但是在 chrome 中,一旦我拖放一次,树被重新初始化,下一次拖动将失败,Uncaught TypeError: Cannot read property 'group' of undefined

  • ✓ 火狐
  • ✓ Internet Explorer
  • ✕铬

【问题讨论】:

  • 在多台计算机上的 linux 和 windows 上检查。挖你拖放两次触发重新初始化?

标签: jquery google-chrome jquery-ui-sortable


【解决方案1】:

如果您在每次初始化该元素之前都销毁sortable,它将起作用:

function init(e) {
    // First of all - we destroy the sortable
    $('ul').sortable('destroy');

    var root = $('<ul></ul>')
    createNodes(root)
    e.html(root)
    root.sortable({
        group: 'foo',
        onDrop: function ($item, container, _super, event) {
            // These two lines are default behaviour of the plugin
            $item.removeClass(container.group.options.draggedClass).removeAttr("style");
            $("body").removeClass(container.group.options.bodyClass);

            console.log('Updating')
            init(e)
        }
    })
}

工作sn-p:

function createNodes(e) {
  var foo = $('<li>Foo<ul></ul></li>');
  var bar = $('<li>Bar<ul></ul></li>');
  var baz = $('<li>Baz<ul></ul></li>');
  bar.find('ul').append(baz);
  e.append(foo, bar);
}

function init(e) {
  // First of all - we destroy the sortable
  $('ul').sortable('destroy');
  
  var root = $('<ul></ul>')
  createNodes(root)
  e.html(root)
  root.sortable({
    group: 'foo',
    onDrop: function ($item, container, _super, event) {
        // These two lines are default behaviour of the plugin
        $item.removeClass(container.group.options.draggedClass).removeAttr("style");
        $("body").removeClass(container.group.options.bodyClass);

        console.log('Updating')
        init(e)
    }
  })
}

$(document).ready(function(){
  init($('#myroot'))
})
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//johnny.github.io/jquery-sortable/js/jquery-sortable.js"></script>
<div id="myroot">
</div>

【讨论】:

  • 你是对的。谢谢。要赢得赏金,您需要提供更多信息,说明为什么这适用于 Chrome 而不是 Firefox。是垃圾回收的区别吗?
  • 我会为你检查一下:)
  • 啊伙计,赏金过期了,所以它会自动分配给你。不知道它是这样工作的。
  • 不确定您的预期。我给出了正确的答案,所以只有我会得到赏金才有意义。你不打算奖励赏金吗?
  • 我想把赏金交给能解释为什么浏览器行为不同的人。但我想这并不重要。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2016-05-15
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2012-10-07
相关资源
最近更新 更多