2012-07-22 11 views
17

Come verificare se un elenco specifico è ordinabile? Mi piace $('#list').is(':sortable') ...?Come verificare se l'elenco è ordinabile?

Se useremo

if ($('#list').sortable()) 

allora la lista sarà reso ancora ordinabili e non controllare se in realtà è ordinabile.

+1

Possibile duplicato di [Trova elementi su cui sono stati inizializzati i widget jquery] (http://stackoverflow.com/questions/11251765/find- elementi-che-hanno-jquery-widget-inizializzati upon loro). Basta usare 'data (" ordinabile ")' invece di 'data (" fileupload ")'. –

risposta

38

Se la lista è già ordinabile, deve avere la classe ui-sortable.

È possibile utilizzare if ($('#list').hasClass('ui-sortable')) per controllarlo.

+0

Non funziona se la pagina viene ricaricata da db dove html è stato salvato con la classe allegata. Il metodo suggerito da jebbie è comunque impeccabile quando si ricaricano le pagine da db. – arkoak

1

Quando si applica Ordinamento, basta aggiungere una classe fittizia a quell'elemento come questo,

$("#sortable").sortable(); 
$("#sortable").addClass("antguider"); 

Poi, se si desidera controllare l'elemento è ordinabile quindi controllare in questo modo,

if($("#sortable").hasClass("antguider")){ 
    alert("Already Sort Applied"); 
} 
+2

Perché aggiungere una classe extra non necessaria quando il widget ordinabile aggiunge già la classe 'ui-sortable'? –

+1

Se per caso versioni future di sortable cambiano il nome della classe, questa soluzione funzionerebbe ancora. – Asaf

+0

beh invece di usare la mia classe preferirei rendere la classe da controllare configurabile e se cambia, cambio solo su config e bam, funziona di nuovo .. mai re-inventare la ruota, il semplice markup dovrebbe essere sempre il target – jebbie

10

I appena scoperto, con l'interfaccia dati funziona anche:

if ($('#sortable').data('sortable')) { 
    // sortable instance exists 
} 
+2

ma devo dire ...credo nella nuova versione di jQuery, questo non funziona più (ho dovuto cambiare tutte queste istanze di codice nel mio ultimo progetto in css-class-detection) – jebbie

+0

Grazie per questo funziona per me. –

2

Ho trovato in Safari (forse altri) t le lezioni non sono affidabili 'ui-sortable' rimane su qualsiasi oggetto che è stato reso ordinabile anche se lo si disabilita, il che risulta in entrambe le classi 'ui-sortable ui-sortable-disabled' in uso.

Mi sono ritrovato ad aggiungere e rimuovere le lezioni per accertarmi che fossero come mi aspettavo.

if ($(this).hasClass("ui-sortable")) { 
    $(this).removeClass("ui-sortable"); 
    $(this).sortable({ disabled: true }); 
} 
else { 
    $(this).addClass("ui-sortable"); 
    $(this).sortable({ disabled: false }); 
} 

- EDIT

Ok, quindi le classi sono affidabili ma ciò che cercavo non è disabilitato, ma piuttosto .sortable ("distruggere"), che restituisce l'elemento al suo stato prima di inizializzazione (vale a dire rimuove tutte le classi di aiuto).

Così per il mio ginocchiera ordinabili (che è quello che stavo creando):

if ($(this).hasClass("ui-sortable")) $(this).sortable("destroy"); 
else $(this).sortable(); 
6

C'è stato un cambiamento in jQuery versione dopo il 2012, così ora si può scrivere:

if ($('#sortable').data('ui-sortable')) { 
    // sortable instance exists 
} 

o

if ($('#sortable').is(':ui-sortable')) { 
    // sortable instance exists 
}