If I do “jquery sortable” on a contenteditable item(s), I then can't focus mouse anywhere inside contenteditable text anymore

后端 未结 7 2284
情深已故
情深已故 2021-02-07 05:31

Strangely this is broken only in Firefox and Opera (IE, Chrome and Safari works as it should).

Any suggestions for a quick fix?




        
相关标签:
7条回答
  • 2021-02-07 05:33

    Yes so for me it was the combination of adding:

    cancel: 'input,textarea,button,select,option,[contenteditable]'
    

    and then taking off the .disableSelection();

    so i'm left with:

    $("#sortable_list").sortable({
        cancel: 'input,textarea,button,select,option,[contenteditable]'
    });
    
    0 讨论(0)
  • 2021-02-07 05:33

    The Patrigan answer is correct, but there's a slightly better way to specify the cancel, such as:

    {cancel: 'input,textarea,button,select,option,[contenteditable]'}
    
    0 讨论(0)
  • 2021-02-07 05:39

    I had the same problem and it was because I was using the function disableSelection() together sortable()

    0 讨论(0)
  • 2021-02-07 05:41

    specify a classname for all editable content, then capture all the onmousedown events using this:

    $('.classname').each ( function(){
        $(this)[0].onmousedown = function() {
            this.focus();
        };
    });
    
    0 讨论(0)
  • 2021-02-07 05:45

    I had a similar issue, but it actually happened due to "disableSelection" call on an element.

    0 讨论(0)
  • 2021-02-07 05:49

    I have found another "solution" to this problem.

    When declaring your sortable, you should add a cancel: option like this:

    <html>
    <head>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
      <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js" type="text/javascript"></script>
      <script>
      $(document).ready(function(){
          $('#sortable').sortable({cancel: ':input,button,.contenteditable'});
      });
      </script>
    </head>
    <body>
      <span id="sortable">
        <p contenteditable="true" class="contenteditable">One apple</p>
        <p>Two pears</p>
        <p>Three oranges</p>
      </span>
    </body>
    </html>
    

    This version does not force your cursor at the start, but you also can't drag using this field. I'd advice wrapping the <p> in a container which has some sort of dragging handle (like the dots at the start of every row in gmail).

    side remark: ':input,button' is required, because that is the default option. If you do not add these, you get similar problems with inputfields and buttons.

    0 讨论(0)
提交回复
热议问题