我试图使用jQuery UI框架重新排序动态创建的CKEditors列表,但我遇到了编辑器释放的问题.当我刚刚使用< textarea>时,它工作得很好,但现在,在拖动操作完成后,它不会让用户写任何文本.
这是Javascript代码:
$(function() { $("#list").sortable({ placeholder: 'ui-state-highlight' }); $("#list").disableSelection(); for (i=0;i<10;i++) { addEditor(); } }); function addEditor() { alert("Hello"); var editor_fields = document.editors.elements["editor[]"]; var editorAmount = 0; if (editor_fields.length) { editorAmount = editor_fields.length; } else { editorAmount = 1; } var newElem = $('#editor_container' + editorAmount).clone().attr('id','editor_container' + (editorAmount + 1)); newElem.html("<textarea class='editor' name='editor[]' id='editor" + (editorAmount + 1) + "' rows='4' cols='30'></textarea>"); $("#editor_container" + editorAmount).after(newElem); $("#editor" + (editorAmount + 1)).ckeditor(); }
这是HTML代码:
<form name="editors"> <ul id="list"> <li name="editor_container1" id="editor_container1"><textarea name='editor[]' id='editor1' rows='4' cols='30'></textarea></li> </ul> </form>
解决方法
虽然不理想,但我发现了一个潜在的解决方案:
$(function () { $("#list").sortable({ placeholder: 'ui-state-highlight',start: function () { $('.editor').each(function () { $(this).ckeditorGet().destroy(); }); },stop: createckeditor() }); $("#list").disableSelection(); for (i = 0; i < 10; i++) { createckeditor() } }); function createckeditor() { $(".editor").ckeditor(); }
这对我有用,因为当你拖动某些东西时,所有编辑器都可以被销毁并重新创建.它可能会被调整为仅删除被拖动的项目.