Jquery.UI.Sortable this.placeholder [0] .parentNode为null

时间:2010-10-12 14:59:25

标签: javascript jquery jquery-ui

我已将两个列表与Sortable相关联。我有一个列表,其中包含可用于移动到包含已订购商品列表的真实列表的可用商品。我的目标是从一个列表中取出一个项目并将其移动到第二个列表。当放入新列表中的位置时,update事件将触发对数据库的json更新。

当您放弃项目时出现问题: $("#sortable2").sortable({items: 'li'}).sortable('toArray')开除了。然后我收到Error: 'this.placeholder.0' is null or not an object消息。

现在在接收列表中,我仍然可以移动项目来诉诸它们,当更新事件触发时,只要我没有将新项目放入列表中,就可以了。

我发现并尝试应用http://dev.jqueryui.com/ticket/6054中指示要替换的错误修复:

this.placeholder[0].parentNode.removeChild(this.placeholder[0]);

if(this.placeholder[0].parentNode)
this.placeholder[0].parentNode.removeChild(this.placeholder[0]);

其他详细信息:我发现当我收到json错误并且尝试$("#sortable2").sortable('cancel');时,我发现错误更加接近我想我现在需要了解如何我将数据从另一个列表移到列表中时取消。

该修复无效。 有谁知道如何解决这个问题?

如果出现某种错误,是否有人知道如何将2个列表恢复为原始状态并取消“取消”?取消是引发错误的原因。

我的代码:

$(function() {
            $("#sortable2").sortable({
                connectWith: '.connectedSortable'
                ,
                placeholder: 'ui-state-highlight'
                ,
                items: 'li:not(.ui-state-disabled)'
                ,
                receive: function(event, ui) {

                },
                remove: function(event, ui) {

                },
                update: function() {
                    $("#sortable2").sortable("refreshPositions");
                    //updateCycleSort();
                }
            })

            $("#sortable1").sortable({
                connectWith: '.connectedSortable'
                ,
                placeholder: 'ui-state-highlight'
            })

            $("#sortable1 li, #sortable2 li").disableSelection();
        });

        function updateCycleSort() {

            alert($("#sortable2").sortable({items: 'li'}).sortable('toArray'));
            $.ajax({
                type: "POST",
                url: updateCycleSortUrl,
                data: "cycles=" + $("#sortable2").sortable({items: 'li'}).sortable('toArray'),
                dataType: "json",
                success: function(response, textStatus, XMLHttpRequest) {
                    if (response.error == "false") {
                        //$('div#resultRecordDetail').html(response.message);
                        //$('div#resultRecordDetail').addClass('success');
                        //autoHide(2500);
                    }
                    else {
                        $("#sortable2").sortable('cancel');
                        alert("error");
                    }
                },
                error: function(response, textStatus, AjaxException) {
                    alert("BIG error " + response.statusText);
                    //$('div.dialog-result').html(response.statusText);
                    //$('div.dialog-result').addClass('error').show();
                    //autoHide(10000);
                }
            });
            return false;
        }

1 个答案:

答案 0 :(得分:0)

在返回stop()后无法取消。你必须实现自己的。

还有一些问题需要解决,例如http://bugs.jqueryui.com/ticket/6054