2013-03-17 13 views
6

$('div.something').sortable(options) funziona correttamente, ma si interrompe dopo $('div.something').unbind();. Il tentativo di rieseguire $('div.something').sortable(options); o $('div.something').sortable('refresh'); dopo $('div.something').unbind(); non aiuta.

Sto usando $ .unbind per disattivare/annullare l'inizializzazione di un plugin rimuovendo gli eventi dall'elemento su cui viene applicato il plugin, tuttavia questa tecnica sta avendo un effetto negativo in quanto sta rompendo $ .sortable. Qualche idea su come riattivare ordinabile?

Sto utilizzando le ultime versioni di jQuery e jQuery UI.

+0

Che cosa stai cercando di disattivare, esattamente? Fare una chiamata per dissipare tutti i gestori di eventi è un'operazione alquanto pericolosa dal momento che stai rinunciando al controllo di ciò che stai ignorando. –

+0

@RubenInfante Sto svincolando un plug-in (un sacco di codice jQuery + backbone) che fa troppe cose in modo che sia complicato scrivere un "destroy" equivalente a passare e pulire correttamente il suo codice. Altri eventi come il clic funzionano bene dopo lo smettere, ma ordinabile mi dà problemi. – Steve

+0

vuoi disabilitare il plugin 'sortable' o vuoi disabilitare tutti gli eventi dall'elemento –

risposta

8

Effettuare una chiamata a .sortable('destroy') prima di chiamare .unbind() rimuoverà completamente la funzionalità ordinabili dall'elemento.

Ciò garantisce il corretto smontaggio prima di eseguire la chiamata un po 'pericolosa a .unbind(), che rimuove tutti i gestori associati sull'elemento. Quindi, è possibile inizializzare nuovamente la funzione ordinabile.

// Initialization of the sortable feature 
$('div.something').sortable(options); 
... 
// Remove the sortable feature to prevent bad state caused by unbinding all 
$('div.something').sortable('destroy'); 
// Unbind all event handlers! 
$('div.something').unbind(); 
... 
// Re-initialize the sortable feature 
$('div.something').sortable(options); 
+0

.sortable ('destroy') è fantastico. mi ci è voluto un bel po 'per trovarlo :) – user3311522

7

Se si desidera disattivare il plugin sortable mi consiglia di utilizzare destroy metodo

$('div.something').sortable(options)//Activate 
.... 
$('div.something').sortable('destroy')//Remove the plugin functionality 
.... 
$('div.something').sortable(options)//Reactivate 

Demo: Fiddle

+0

Sto cercando di riattivare '$ .sortable()' dopo '$ .unbind()'. Problema risolto (consultare: http://stackoverflow.com/questions/15457292/how-to-re-enable-re-bind-jquery-ui-sortable-after-unbind#comment21871866_15457292). Hai avuto l'idea giusta. – Steve

+0

@Max sembra che tu abbia aggiunto un riferimento alla mia risposta –

Problemi correlati