Использование revert inside beforeStop () вызывает ошибку - как это исправить? - PullRequest
2 голосов
/ 14 февраля 2012

У меня есть список 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:

Uncaught TypeError: Невозможно вызвать метод 'removeChild' со значением NULL

jquery-ui-1.8.12.custom.min.js

d.widget._clear

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

$. Виджет. $. 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

ч

jquery.js:4

f.extend.tick

jquery.js:4

Может кто-нибудь дать мне несколько советов, как это отладить? Или есть альтернативный способ, который вы бы порекомендовали? Я использую последнюю версию 1.3.4 и jQuery 1.7.1.

1 Ответ

5 голосов
/ 14 февраля 2012

Используйте stop () вместо beforeStop ().

...