我有一个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。