Bir jquery-ui sürüklenebilirliğini nasıl devre dışı bırakırım?


101

Bir jQuery sürüklenebilir dosyasını nasıl devre dışı bırakırım, örneğin bir UpdatePanel geri gönderimi sırasında?

Yanıtlar:


149

Bir DisableDrag (myObject) ve bir EnableDrag (myObject) işlevi oluşturabilir

myObject.draggable( 'disable' )

Sonra

myObject.draggable( 'enable' )

2
Bu çalışıyor. Sürüklenebilir () için tam dokümanlar burada . Aynısı sıralanabilir () nesneler için de geçerli (eğer sürükle-bırak ile yeniden sıralamaya izin
veriyorsanız

3
Hangi yani sürüklenebilir () docs (bundan?) Buraya , NICKb bağlantısına sahip olan, yukarıda, gidiş demo . ;)
2013

Bu bana "başlatmadan önce sürüklenebilir üzerinde yöntemler çağıramaz;" devre dışı bırakma "yöntemini çağırmaya çalıştı"
Haseeb Zulfiqar

Mian Haseeb:
Şuna

70

Sürüklenebilir davranışı geçici olarak devre dışı bırakmak için şunu kullanın:

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

Sürüklenebilir davranışı kalıcı olarak kaldırmak için şunu kullanın:

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

6
'Devre dışı bırakmanın' css ile ilgili bir yan etkisi olduğunu, ancak işleri kusursuz bir şekilde yok etmenin olduğunu buldum.
Niels Brinch

1
@jedanput, devre dışı bırakmanın yan etkisi, sürüklenebilir öğelerin gri bir görünüme sahip olmasıdır. yok etme görünüşü rahat bırakıyor gibi görünüyor.
samazi

19

JQuery'de sürüklenebilirliği etkinleştirmek / devre dışı bırakmak için kullandım:

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

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

@Calciphus cevabı opaklık problemiyle benim için işe yaramadı, bu yüzden kullandım:

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

Mobil cihazlarda da çalıştı.

İşte kod: http://jsfiddle.net/nn5aL/1/


JSfiddle'ınız çalışmıyor gibi görünüyor. Düğmeler tıklanmıyor (en son Chrome'u kullanarak). Bağlantıları güncellemeyi ve aramayı denedim button()ama bu yardımcı olmadı.
ashes999

2
Verilen tüm çözümlerden, bu benim için% 100 çalışan tek çözümdü - diğerleri (devre dışı bırak / yok et vb. kombinasyonları kullanarak) css sorununu çözmedi. Sürükle + bırak kullanan uygulamamda, ilklendirmeden bu yana sürüklenen öğeler için opaklığın dokunulmamış olanlara göre farklı olduğunu gördüm. Hepsi çok dağınık. @CarinaPilar'a hem çözüm hem de bunu kanıtlayan jsfiddle için teşekkürler.
Andy Lorenz

11

Bırakıldığında sürüklenmeyi nasıl devre dışı bırakacağımı bulmam biraz zaman aldı — ui.draggablebırakma işlevinin içinden sürüklenen nesneye referans vermek için kullanın :

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

HTH birisi


Bunun için teşekkürler. Bu çözüm, AngularJS'de sürüklenebilir / bırakılabilir yönergeler kullanıldığında iyi çalışıyor gibi görünüyor.
Banjo Drill

10

Orijinal belgelere kimse bakmamış gibi görünüyor. Belki o zaman yoktu))

Devre dışı bırakılmış seçeneği belirtilen sürüklenebilir bir dosyayı başlatın.

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

Init'ten sonra devre dışı bırakılmış seçeneği alın veya ayarlayın.

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

Bu işe yarıyor ama div'imi yaklaşık% 50 opaklık yapmanın bir yan etkisi var ... Neden olduğuna dair hiçbir fikrim yok.
Devil's Advocate

@ScottBeeson jQuery'de bir şeyi her devre dışı bıraktığınızda, "ui-state-disabled" sınıfını ekler. Bunu şu şekilde kaldırabilirsiniz: $ (". Ui-draggable"). RemoveClass ("ui-state-disabled")
Calciphus

7

Bir iletişim kutusu olması durumunda, sürüklenebilir adlı bir özelliği vardır, bunu yanlış olarak ayarlayın.

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

Soru eski olmasına rağmen önerilen çözümü denedim ve diyalog için işe yaramadı. Umarım bu benim gibi başkalarına yardımcı olabilir.


Sorunun özellikle jQueryUI Dialogs ile ilgili olduğundan emin değilim , ancak yine de gönderinizi yararlı buldum.
Shawn eary

3

Aşağıdakiler, bunun içinde nasıl görüneceği .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

Sınıfları, stilleri, opaklıkları ve diğer şeyleri karıştırmayan daha basit ve zarif bir çözümüm var.

Sürüklenebilir öğe için - öğeyi bir yere her hareket ettirmeye çalıştığınızda yürütülecek "başlangıç" olayını eklersiniz. Yasal olmayan bir durumunuz olacak. Yasadışı hareketler için - bunları 'e.preventDefault ()' ile engelleyin; aşağıdaki koddaki gibi.

    $(".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();
            }    

        }
    });

Rica ederim :)


0

draggableÖzniteliği şundan değiştir :

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

-e

<span draggable="false">Label</span>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.