2

我有一个nestedSortable 列表,其中我不允许嵌套具有相同名称的项目(可能是id,无论如何)。我正在使用 beforeStop() 方法来获取当前元素的名称及其父级父级的名称(因为当它嵌套时,它会获取表单:)

<ol class="sortable">
    <li><div id="1">Item</div>
        <ol>
            <li>
                <div id="2">Item</div>
            </li>
        </ol>
    </li>
</ol>

请注意,我使用 div 元素作为句柄。我初始化nestedSortable的代码是

 $('ol.sortable').nestedSortable({
        disableNesting: 'no-nest',
        forcePlaceholderSize: true,
        handle: 'div',
        helper: 'clone',
        items: 'li',
        maxLevels: 5,
        opacity: .6,
        placeholder: 'placeholder',
        revert: 250,
        tabSize: 25,
        tolerance: 'pointer',
        toleranceElement: '> div',
        beforeStop: function(event, ui){ // disallows two elements with the same part number from nesting
            var thisName = ui.item[0].firstChild.innerHTML;
            var parentName = ui.item[0].parentElement.parentElement.firstChild.innerHTML;
            if (thisName == parentName){
                $(this).sortable('cancel');
            }
        }
    });

此代码确实可以禁止嵌套具有相同名称的项目,如果我在控制台记录移动的元素及其祖父母,我可以看到我引用了正确的元素。但是,我在调用 sortable('cancel') 后也收到以下控制台错误,这自然会炸毁 IE:

未捕获的类型错误:无法调用 null 的方法“removeChild”

jquery-ui-1.8.12.custom.min.js

d.widget._clear

jquery-ui-1.8.12.custom.min.js:269

$.widget.$.extend._clear

 jquery.ui.nestedSortable.js:305

d.widget._mouseStop

jquery-ui-1.8.12.custom.min.js:237

f.extend.speed.d.complete

jquery.js:4

f.fx.step

jquery.js:4

H

jquery.js:4

f.extend.tick

jquery.js:4

有人可以给我一些关于如何调试的提示吗?或者您有其他推荐的方法吗?我使用的是最新版本 1.3.4 和 jQuery 1.7.1。

4

1 回答 1

5

使用 stop() 而不是 beforeStop()。

于 2012-02-14T14:20:53.243 回答