【问题标题】:jquery sortable div drag and drop text is not editable by ckeditorjquery sortable div拖放文本不能被ckeditor编辑
【发布时间】:2020-06-11 02:34:07
【问题描述】:

我有以下源代码

$( function() {
  $( "#sortable1, #sortable2" ).sortable({
    connectWith: ".connectedSortable"
  }).disableSelection();
} );

InlineEditor
  .create( document.querySelector( '.editor' ) )
  .catch( error => {
    console.error( error );
  });
#sortable1, #sortable2 {
  border: 1px solid #eee;
  width: 142px;
  min-height: 20px;
  list-style-type: none;
  margin: 0;
  padding: 5px 0 0 0;
  float: left;
  margin-right: 10px;
}
#sortable1 li, #sortable2 li {
  margin: 0 5px 5px 5px;
  padding: 5px;
  font-size: 1.2em;
  width: 120px;
}
<!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>jQuery UI Sortable - Connect lists</title>
      <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
      <link rel="stylesheet" href="/resources/demos/style.css">
      <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <body>
     
    <p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
    
    
    <ul id="sortable1" class="connectedSortable">
      <li class="ui-state-default">Item 1</li>
      <li class="ui-state-default">Item 2</li>
      <li class="ui-state-default">Item 3</li>
      <li class="ui-state-default">Item 4</li>
      <li class="ui-state-default">Item 5</li>
    </ul>
     
    <ul id="sortable2" class="connectedSortable">
      <li class="ui-state-highlight editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
      <li class="ui-state-highlight">Item 2</li>
      <li class="ui-state-highlight">Item 3</li>
      <li class="ui-state-highlight">Item 4</li>
      <li class="ui-state-highlight">Item 5</li>
    </ul>
     
     
    </body>
    </html>
    
    <script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>

这个连接的可排序拖放列表由 jquery ui 构建。我想通过ckeditor为每个可排序的&lt;li&gt;元素文本编辑文本。但是使用上面的代码段,可排序项目的内部文本是不可编辑的。 我想要两个活动是项目应该是可拖放的和内联文本编辑。

如何更改可以编辑可排序项目文本的代码段?

【问题讨论】:

    标签: jquery jquery-ui drag-and-drop ckeditor jquery-ui-sortable


    【解决方案1】:

    您必须为您的 HTML 标签提供id 属性,这可能是为了确保库不会错误地将您的标签与其他标签混淆。

    更新:实现这种情况的最佳方法是为sortable() 配置禁用选项,并在dbclick() 上启用内联编辑器并禁用可排序选项,然后在blur() 上,我们销毁内联编辑器并重新启用元素上的排序功能。

    我测试的不够多,你可能会遇到一些与blur() 在CKeditor 上未正确触发有关的错误,我将把它留给你。只需双击编辑器&lt;li&gt; 元素,这将启用CKeditor,然后再次单击它以使编辑器出现,然后您可以单击页面中的任意位置以禁用编辑器并重新存储sortable() 功能。

    这是一个有效的 sn-p。

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>jQuery UI Sortable - Connect lists</title>
      <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
      <link rel="stylesheet" href="/resources/demos/style.css">
      <style>
      #sortable1, #sortable2 {
        border: 1px solid #eee;
        width: 142px;
        min-height: 20px;
        list-style-type: none;
        margin: 0;
        padding: 5px 0 0 0;
        float: left;
        margin-right: 10px;
      }
      #sortable1 li, #sortable2 li {
        margin: 0 5px 5px 5px;
        padding: 5px;
        font-size: 1.2em;
        width: 120px;
      }
      </style>
      <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
      
    </head>
    <body>
    
    <p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
    
    
    <ul id="sortable1" class="connectedSortable">
      <li class="ui-state-default">Item 1</li>
      <li class="ui-state-default">Item 2</li>
      <li class="ui-state-default">Item 3</li>
      <li class="ui-state-default">Item 4</li>
      <li class="ui-state-default">Item 5</li>
    </ul>
    
    <ul id="sortable2" class="connectedSortable">
      <li class="ui-state-highlight" id="editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
      <li class="ui-state-highlight">Item 2</li>
      <li class="ui-state-highlight">Item 3</li>
      <li class="ui-state-highlight">Item 4</li>
      <li class="ui-state-highlight">Item 5</li>
    </ul>
    
    <!-- <div id="editor">
        <p>this is test</p>
    </div> -->
    </body>
    </html>
    
    <script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
    <script>
        $( function() {
          var myEditor;
            $( "#sortable1, #sortable2" ).sortable({
              connectWith: ".connectedSortable",
              cancel: ".unsortable" 
            });
    
            document.querySelector( '#editor' ).addEventListener('dblclick', function() {
                $(this).addClass('unsortable');
                myEditor = InlineEditor
                  .create( document.querySelector( '#editor' ) )
                  .catch( error => {
                      console.error( error );
                  }).then(editor => myEditor = editor)
            });
    
            document.querySelector( '#editor' ).addEventListener('blur', function() {
                myEditor.destroy().then(editor => $(this).removeClass('unsortable'))
            });
    } );
      
    </script>

    【讨论】:

    • 使用代码段,项目不能通过拖放进行排序,只有内联文本编辑器处于活动状态。我想要两个活动是项目应该是可拖放的和内联文本编辑。
    • 我更新了我的 sn-p,但似乎事件相互覆盖,现在将检查它,但将是一个解决方案,让按钮在排序拖动和编辑之间切换?
    • 对不起,我需要两个活动,项目应该是可排序的,项目文本将可由 ckeditor 编辑。
    • @OptimusPrime,我更新了我的答案,请查看。
    • 很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多