2012-05-06 12 views
17

Sto usando il jable di jQuery su un plug-in di tagging, Il plug-in mantiene una serie di oggetti che si riferiscono allo li nello stesso ordine degli articoli effettivi.jQuery ordinabile get .index() prima e dopo l'ordinamento?

Ho bisogno di aggiornare l'ordine degli elementi nella matrice al termine dell'ordinamento.

Ho pensato che sarei stato in grado di chiamare l'evento di inizio $(ui).index() e nella chiamata all'evento di aggiornamento lo stesso che mi avrebbe dato la posizione iniziale e la posizione finale, ma entrambe le chiamate restituiscono -1.

Come devo fare?


Struttura:

<ul> 
<li>here<a class="close">x</a></li> 
<li>are<a class="close">x</a></li> 
<li>some<a class="close">x</a></li> 
<li>tags<a class="close">x</a></li> 
</ul> 

Array Struttura:

[{ 
    label: 'here', 
    value: 36, 
    element: '$(the li that this info is about)', 
    index: 0 
}, 
{ 
    label: 'are', 
    value: 42, 
    element: '$(the li that this info is about)', 
    index: 1 
}, 
{ 
    label: 'some', 
    value: 21, 
    element: '$(the li that this info is about)', 
    index: 2 
}, 
{ 
    label: 'tags', 
    value: 26, 
    element: '$(the li that this info is about)', 
    index: 3 
}] 

JavaScript:

$('ul').sortable({ 
    start: function(event, ui){...}, 
    update: function(event, ui){...} 
}); 
+1

Puoi prega di inviare alcuni dei il codice in modo che abbiamo un posto dove iniziare? È difficile guidarti senza sapere cosa sei, ecc. Grazie. – jmort253

risposta

11

se .index() sta tornando - 1, suggerirebbe di fare quella richiesta prima che l'elemento sia disponibile per il DOM. o avete mislabeled un selettore e ancora una volta non esiste @ momento della chiamata o è vuota in relazione alla funzione .index()

+7

Hai ragione, Il problema era che dovevo chiamare '$ (ui.item) .index()' non solo '$ (ui) .index()'! – Hailwood

+5

Nota: $ (ui.item) non è necessario; ui.item.index() funzionerà correttamente. –

2

è possibile associare alcuni dati con ogni elemento della lista per tenere traccia di loro come questo :

<ul id="sortable"> 
<li data-id="1" class="ui-state-default">1</li> 
<li data-id="2" class="ui-state-default">2</li> 
<li data-id="3" class="ui-state-default">3</li> 
</ul> 

si può poi accedere a questi dati tramite jQuery come questo:

$('ul li:nth-child(0)').data('id'); 
$('ul li:nth-child(1)').data('id'); 
$('ul li:nth-child(2)').data('id'); 
27
 
$(function() { 
    $("#sortable").sortable({ 
     update: function(event, ui) { 
      console.log('update: '+ui.item.index()) 
     }, 
     start: function(event, ui) { 
      console.log('start: ' + ui.item.index()) 
     } 
    }); 
    $("#sortable").disableSelection(); 
}); 
Problemi correlati