1

尝试在包含嵌套可排序列表的 jquery .sortable 列表上使用“beforeStop”函数时,出现以下 javascript 错误:

Uncaught TypeError: Cannot call method 'removeChild' of null

根据我见过的其他网站,这可能是因为我的项目实际上在它们下面有嵌套的可排序列表......并且在尝试取消可排序时,它不喜欢嵌套列表。除了抛出错误之外,它似乎仍然可以正常工作,但我仍然想避免错误。

我尝试了其他解决方案,但似乎无法以任何其他方式成功处理这种情况。“取消”或“项目”选项不起作用(仍然需要这些在主列表中可排序),容器属性也不起作用,因为项目混合在一起(有些可以移动到另一个列表,有些不能)。

我真的在寻找另一种解决方案,但我没有想法......还有其他建议吗?我真正想要的是在可排序项目中具有特定类别的项目不要离开他们的容器。就像“forceContainment:.specialItems”或其他东西的属性。

这是一个显示我在说什么的 jsFiddle:http: //jsfiddle.net/dataweb/28nMJ/37/

如果您检查输出的 javascript 错误/控制台,您将看到抛出的错误。

HTML:

<p>sublists shouldn't be able to be dragged out of their normal list</p>
<ul id="list1" class='mainlist'>
    <li>One (a)</li>
    <li>Two (a)</li>
    <li class="hasItems">Three (a)
        <ul class="sublist">
            <li>subitem1-1</li>
            <li>subitem1-2</li>
            <li>subitem1-3</li>
            <li>subitem1-4</li>
        </ul>
    </li>
    <li>Four (a)</li>
    <li class="hasItems">Five (a)
        <ul class="sublist">
            <li>subitem2-1</li>
            <li>subitem2-2</li>
            <li>subitem2-3</li>
            <li>subitem2-4</li>
        </ul>
    </li>
</ul>
<ul id="list2" class='mainlist'>
    <li>1</li>
    <li>Two (b)</li>
    <li>Three (b)</li>
</ul>

javascript:

$('ul.mainlist').sortable({
    connectWith: 'ul.mainlist',
    beforeStop: function(ev, ui) {
        if ($(ui.item).hasClass('hasItems') && $(ui.placeholder).parent()[0] != this) {
            $(this).sortable('cancel');
        }
    }
});
$('ul.sublist').sortable({
    connectWith: 'ul.sublist'
});

任何帮助或反馈将不胜感激。

4

2 回答 2

3

检查空父,试试这个:

beforeStop: function(ev, ui) {
    var parent = $(ui.placeholder);
    if ($(ui.item).hasClass('hasItems') && parent.length && parent[0] != this) {
        $(this).sortable('cancel');
    }
}

jsFiddle

于 2013-07-18T04:49:29.070 回答
-5

在一种情况下,我在 RadComboBox 中使用 RadTreeview,我收到此错误“未捕获的类型错误:在更改 RadComboBox 中项目的索引时无法读取 null 的属性‘removeChild’ 。

仅供参考 - 我正在使用telerik:AjaxSetting进行部分页面回发。

在我的情况下,问题出在Telerik:RadAjaxLoadingPanel中的 my- AnimationDuration="5"

这就像是 -

Telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel2" Skin="Office2007" runat="server" AnimationDuration="5" MinDisplayTime="300"

我删除了AnimationDuration="5"属性,它解决了我的问题。我希望这将有所帮助。

于 2014-04-14T08:53:51.933 回答