jquery-uiドラッグ可能を無効にするにはどうすればよいですか?


回答:


148

DisableDrag(myObject)およびEnableDrag(myObject)関数を作成できます

myObject.draggable( 'disable' )

その後

myObject.draggable( 'enable' )

2
これは機能します。draggable()の完全なドキュメントはここにあります。(。あなたはドラッグアンドドロップの並べ替えを可能なら)同じことが()オブジェクトのソート可能なために行く
nickb

3
これは、draggable()ドキュメントが(今?)ここにあり、上記のnickbのリンクとともに、デモに行くということです。;)
2013年

これにより、「初期化前にドラッグ可能なメソッドを呼び出せません。メソッド 'disable'を呼び出そうとしました」
Haseeb Zulfiqar

ミアンハシーブ:この参照:stackoverflow.com/questions/14955630/...
madcolor

68

ドラッグ可能な動作を一時的に無効にするには、以下を使用します。

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

ドラッグ可能な動作を完全に削除するには、次を使用します。

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

6
'disable'にはCSS関連の副作用があることがわかりましたが、destroyは問題なく動作します。
Niels Brinch 2013

1
@jedanput disableを使用した場合の副作用は、ドラッグ可能な要素の外観がグレー表示されることです。destroyは外観をそのままにしているようです。
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%機能した唯一の解決策でした-(無効化/破棄などの組み合わせを使用した)他のすべての解決策はCSSの問題を修正しませんでした。ドラッグ+ドロップを使用する私のアプリでは、初期化以降にドラッグされた要素と、タッチされていない要素の不透明度が異なることがわかりました。すべて非常に厄介です。ソリューションとそれを証明するjsfiddleの両方について@CarinaPilarに感謝します。
Andy Lorenz

11

ドロップ時にドラッグ可能を無効にする方法を理解するには少し時間がかかりました。ui.draggableドロップ関数内からドラッグされているオブジェクトを参照するために使用します。

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

HTH誰か


これをありがとう。このソリューションは、AngularJSでドラッグ可能/ドロップ可能なディレクティブを使用する場合にうまく機能するようです。
バンジョードリル

10

元のドキュメントを誰も見なかったようです。その時それがなかったかもしれません))

無効化されたオプションを指定してドラッグ可能オブジェクトを初期化します。

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

初期化後、無効オプションを取得または設定します。

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

これは機能しますが、divの不透明度を約50%にするという副作用があります...理由はわかりません。
Devil's Advocate 2013年

@ScottBeeson jQueryで何かを無効にすると、「ui-state-disabled」クラスが追加されます。$( "。ui-draggable")。removeClass( "ui-state-disabled")
Calciphus

7

ダイアログの場合は、draggableというプロパティがあり、falseに設定します。

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

質問は古いですが、提案された解決策を試してみましたが、ダイアログでは機能しませんでした。これが私のような他の人に役立つことを願っています。


私は確かに問題が具体的にjQueryUIに関連していないよダイアログが、私はそれにもかかわらず、あなたのポストが役に立ったと評価してい。
Shawn Eary 2013

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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.