如何禁用可拖动的jQuery UI?


Answers:


148

可以创建DisableDrag(myObject)和EnableDrag(myObject)函数

myObject.draggable( 'disable' )

然后

myObject.draggable( 'enable' )

2
这可行。draggable()的完整文档在这里。对于sortable()对象也是如此(如果您允许拖放重排序。)
nickb

3
就是说draggable()文档在这里(现在?),上面有nickb的链接,进入演示。;)
ruffin

这使我“在初始化之前无法在可拖动对象上调用方法;​​试图调用方法“禁用””
Haseeb Zulfiqar


68

要暂时禁用可拖动行为,请使用:

$('#item-id').draggable( "disable" )

要永久删除可拖动行为,请使用:

$('#item-id').draggable( "destroy" )

6
我发现“禁用”具有css相关的副作用,但可以完美地进行销毁。
Niels Brinch

1
@jedanput使用disable的副作用是可拖动元素的外观为灰色。破坏似乎不影响外观。
samazi 2014年

19

要在jQuery中启用/禁用可拖动,我使用了:

$("#draggable").draggable({ disabled: true });          

$("#draggable").draggable({ disabled: false });

@Calciphus的答案不适用于不透明性问题,因此我使用了:

div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}

也可以在移动设备上工作。

这是代码:http : //jsfiddle.net/nn5aL/1/


您的JSfiddle似乎不起作用。按钮不会单击(使用最新的Chrome)。我尝试将其更新为链接并进行调用,button()但这没有帮助。
ashes999

2
在给出的所有解决方案中,这是唯一为我工作100%的解决方案-所有其他解决方案(使用disable / destroy等的组合)都不能解决css问题。在使用拖放功能的应用程序中,我发现自初始化以来被拖动的那些元素的不透明度与未被触摸的那些元素的不透明度是不同的。一切都很混乱。感谢@CarinaPilar提供解决方案和jsfiddle来证明它。
安迪·洛伦兹

11

我花了一些时间弄清楚如何禁用放置时的可拖动性-用于ui.draggable引用从放置功能内部拖动的对象:

$("#drop-target").droppable({
    drop: function(event, ui) {
        ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
        
    }
});

有人


谢谢你 当在AngularJS中使用可拖动/可拖放指令时,此解决方案似乎效果很好。
Banjo Drill

10

似乎没有人看过原始文档。当时可能没有))

使用指定的禁用选项初始化可拖动对象。

$( ".selector" ).draggable({ disabled: true });

初始化后获取或设置禁用的选项。

//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );

这可行,但是有一个副作用,使我的div约有50%的透明度...我不知道为什么。
魔鬼的代言人

@ScottBeeson每当您在jQuery中禁用某些功能时,它都会添加“ ui-state-disabled”类。您可以使用以下命令将其删除:$(“。ui-draggable”)。removeClass(“ ui-state-disabled”)
Calciphus 2013年

7

对于对话框,它具有一个称为draggable的属性,请将其设置为false。

$("#yourDialog").dialog({
    draggable: false
});

即使问题很老,我还是尝试了建议的解决方案,但该方法不适用于该对话框。希望这可以帮助像我这样的人。


我不确定这个问题是否与jQueryUI Dialogs有关,但是我发现您的帖子仍然很有帮助。
肖恩·埃里

3

以下是里面的样子 .draggable({});

$("#yourDraggable").draggable({
    revert: "invalid" ,
    start: function(){ 
        $(this).css("opacity",0.3);
    },
    stop: function(){ 
        $(this).draggable( 'disable' )
    },
    opacity: 0.7,
    helper: function () { 
        $copy = $(this).clone(); 
        $copy.css({
            "list-style":"none",
            "width":$(this).outerWidth()
        }); 
        return $copy; 
    },
    appendTo: 'body',
    scroll: false
});

3

我有一个简单而优雅的解决方案,不会混淆类,样式,不透明性和其他东西。

对于可拖动元素-您添加“开始”事件,该事件将在您每次尝试将元素移动到某处时执行。您将有一个不合法举动的条件。对于非法移动,请使用'e.preventDefault();'阻止它们 就像下面的代码一样。

    $(".disc").draggable({
        revert: "invalid", 
        cursor: "move",
        start: function(e, ui){                
            console.log("element is moving");

            if(SOME_CONDITION_FOR_ILLEGAL_MOVE){
                console.log("illegal move");
                //This will prevent moving the element from it's position
                e.preventDefault();
            }    

        }
    });

别客气 :)


0

draggable从更改属性

<span draggable="true">Label</span>

<span draggable="false">Label</span>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.