8

示例:我有一个包含一堆表单输入的无序列表。

在制作 ul .sortable() 之后,我在可排序 (ul) 上调用 .disableSelection() 以防止在拖动 li 项目时进行文本选择。

..一切都很好,但我需要在表单输入上重新/启用文本选择..或者表单基本上是不可编辑的..

我找到了部分解决方案@ http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs

有什么想法吗?

4

7 回答 7

21

解决了 。有点破解,但有效!..任何评论我怎么能做得更好?

应用 .sortable() 然后在输入字段上启用文本选择:


$("#list").sortable({
  stop: function () {
    // enable text select on inputs
    $("#list").find("input")
     .bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) {
      e.stopImmediatePropagation();
    });
  }
}).disableSelection();

// enable text select on inputs
$("#list").find("input")
 .bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) {
  e.stopImmediatePropagation();
});
于 2010-11-15T19:23:19.557 回答
4

Zack 的帖子的一点改进 - jQuery 插件

$.fn.extend({
    preventDisableSelection: function(){
        return this.each(function(i) {
            $(this).bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) {
                e.stopImmediatePropagation();
            });
        });
    }
});

完整的解决方案是:

$("#list").sortable({
  stop: function () {
    // enable text select on inputs
    $("#list").find("input").preventDisableSelection();
  }
}).disableSelection();

// enable text select on inputs
$("#list").find("input").preventDisableSelection();
于 2012-11-30T08:35:58.363 回答
3

jQuery UI 1.9

$("#list").sortable();
$("#list selector").bind('click.sortable mousedown.sortable',function(e){
    e.stopImmediatePropagation();
});

选择器= 输入、表格、li ....

于 2012-10-18T17:03:23.017 回答
0

我有同样的问题。解决方案很简单:

$("#list").sortable().disableSelection();
$("#list").find("input").enableSelect();
于 2011-10-05T13:35:57.640 回答
0

简单的!做就是了:

$( "#sortable_container_id input").click(function() { $(this).focus(); });

并将“sortable_container_id”替换为作为所有“可排序”元素的容器的元素的id。

于 2014-10-28T20:50:58.393 回答
0

以下将禁用对整个文档的选择,但输入和选择元素仍将起作用...

function disableSelection(o) {
  var $o = $(o);
  if ($o.find('input,select').length) {
    $o.children(':not(input,select)').each(function(x,e) {disableSelection(e);});
  } else {
    $o.disableSelection();
  }
}
disableSelection(document);

但请注意 .disableSelection 已被 jquery-ui 弃用,并且有一天会消失。

于 2013-07-05T16:48:19.567 回答
0

相当古老,但这是另一种方式:

$('#my-sortable-component').sortable({
    // ...
    // Add all non draggable parts by class name or id, like search input texts and google maps for example
    cancel: '#my-input-text, div.map',
    //...
}).disableSelection();
于 2019-05-09T14:20:14.010 回答