2009-07-23 15 views
22

Ich habe jQueryUI sortierbare Liste implementiert und es funktioniert wirklich nett. Zu einem bestimmten Zeitpunkt möchte ich die weitere Sortierung deaktivieren und die Reihenfolge der Elemente beibehalten, ohne dass der Benutzer sie ändern kann.Wie kann ich die Sortierung mit jQueryUI deaktivieren?

Es versucht, etwas dieses:

$('.sortable').sortable('disable'); 

und diese:

$('.sortable').each(function() { $(this).sortable('disable'); }); 

und:

$('.sortable').disable(); 

und:

$('.sortable').cancel(); 

und verschiedene Kombinationen von allem. Alles ohne Erfolg.

Kann jemand sagen ne Der richtige Weg ™ es zu tun?

Update: Ich benutze jQuery 1.3.2 und jQueryUI 1.7.2. Ein mögliches Problem könnte sein, dass ich zwei unabhängige sortierbare Listen auf der Seite habe, also habe ich sortable1 und sortierbar2 Klassen. Ich mache eigentlich:

$('.sortable2').sortable('disable'); 

Update2: das Problem mich anstelle von #sortable mit .sortable. Alles funktioniert jetzt gut.

+1

Seltsam. Docs sagen '.sortable ('disable')' http://docs.jquery.com/UI/Sortable#method-disable – seth

+1

Der erste Weg ist das Beispiel in der [Dokumentation] [1]. Ich habe es gerade mit einem meiner eigenen Projekte getestet und es funktioniert gut. Welche Versionen von jQuery und jQuery UI verwenden Sie? Ich habe 1.3.2 bzw. 1.7.2. [1]: http://jqueryui.com/demos/sortable/#method-cancel – shuckster

+0

+1 für die Marke "The Right Way". – Andy

Antwort

3

Der erste Weg ist das Beispiel in der documentation gegeben. Ich habe es gerade mit einem meiner eigenen Projekte getestet und es funktioniert gut. Welche Versionen von jQuery und jQuery UI verwenden Sie? Ich habe 1.3.2 bzw. 1.7.2.

31
$(ui.sender).sortable("disable") 
+1

Sie rockt Bruder ... Arbeitete für mich –

5

war ich in den Prozess der Fehlersuche:

  1. Klick sortierbar
  2. Finish (sortierbar deaktivieren)
  3. Klick zu machen zu machen wieder sortierbar funktionierte nicht
  4. Lösung/Abhilfe: set deaktiviert Option auf false explizit

http://plnkr.co/edit/uX6cNNiYoejYqwQicEhg?p=preview

function sortableEnable() { 
    $("#sortable").sortable(); 
    $("#sortable").sortable("option", "disabled", false); 
    // ^^^ this is required otherwise re-enabling sortable will not work! 
    $("#sortable").disableSelection(); 
    return false; 
    } 
    function sortableDisable() { 
    $("#sortable").sortable("disable"); 
    return false; 
    } 

Hoffnung, das hilft.

4

Dank Michal

Ich habe eine Version für Listen, die entweder sortierbar oder bearbeitet werden können.

Sehr nützlich für mich mindestens!

+0

und um de blauen Rahmen zu verbergen, wenn der Inhalt bearbeitet werden kann, verwenden Sie diesen CSS-Stil: [contenteditable]: Fokus {Umriss: 0px solide transparent; } –

1

Während die vorgeschlagenen Beiträge vor mir nützlich waren, lösten sie nicht, was ich versuchte zu erreichen. Ich wollte sortierbar über mehrere Bereiche ein- und ausschalten und die Möglichkeit hinzufügen, Inhalte wieder auswählbar zu machen. Hier

ist der Code, den ich verwendet:

function AddSortable() { 

    $("ul").sortable({ 
     connectWith: "ul", 
     disabled: false 
    }).disableSelection(); 

    return false; 
}; 

function RemoveSortable(){ 

    $("ul").sortable({ 
     disabled: true 
    }).enableSelection(); 

    $("li").attr("contentEditable","true"); 

    return false; 
} 
+0

sortierbar ('deaktiviert') würde für mich nicht funktionieren, aber ein Objekt mit deaktiviert: True hat funktioniert. –

+0

Was nutzt 'contentEditable'? –

0

Um sortable() zu deaktivieren können Sie verwenden

$(".sortable").sortable("disable");

Zum Umschalten aktivieren/deaktivieren auf dem Klick auf eine Schaltfläche mit der ID toggleButton

$('#toggleButton').click(function() { 
    //check if sortable() is enabled and change and change state accordingly 
    // Getter 
    var disabled = $(".sortable").sortable("option", "disabled"); 
    if (disabled) { 
    $(".sortable").sortable("enable"); 
    } 
    else { 
    $(".sortable").sortable("disable"); 
    } 
}); 
Verwandte Themen