2009-09-29 2 views
7

Ho una semplice jQuery ordinabile basa su una lista come segue:jQuery altezza elemento ordinabile

<ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
</ul> 

ho creato una funzione di supporto in modo che, indipendentemente da quello che può essere il contenuto di un elemento, il l'aiutante ha sempre le stesse dimensioni fisse.

Il mio problema è che se trascino un oggetto che ha un sacco di contenuto (dice diversi paragrafi di testo), anche se il mio helper è solo una linea singola in altezza, l'oggetto non scenderà sull'elemento sottostante fino a ha viaggiato almeno all'altezza originale del mio oggetto.

Ad esempio:

<ul> 
    <li>Item 1 
    line2 
    line3 
    line4 
    line5 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
</ul> 

Se trascino voce1 il mio aiuto si trasforma questo in una sola riga - piacevole e facile da trascinare. Tuttavia, devo ancora spostare le 5 linee del mouse sullo schermo prima che l'elemento 1 possa essere lasciato tra item2 e item3. Una volta trascinato ad altezza sufficiente, l'elemento sembra funzionare come mi aspetterei e non è più necessario trascinarlo all'altezza originale.

Ho provato tutte le opzioni ordinabili che riesco a pensare, ma senza risultati e spero che qualcuno abbia un suggerimento.

$('#sortable').sortable({ 
    placeholder: 'highlight', 
    axis: 'y', 
    helper: function(event) { 
    return $(this).find('.drag').clone(); 
}, 
}); 

risposta

0

Si potrebbe afferrare l'altezza corrente del Div essere trascinato, salvarla in una variabile e assegnare un'altezza generica al DIV trascinato. Una volta posizionato, usa la richiamata per riassegnare l'altezza all'interno della variabile.

var curHeight = $(div).height(); 

$(div).css({height: 20px;}); 

Si può anche prendere in considerazione forceHelperSize

25

Dopo molte capelli-strappo ho aggiunto questo evento per l'ordinabile:

start: function(event, ui) { 
    $(this).sortable('refreshPositions') 
    }, 

Sembra di fare il trucco come penso start() viene chiamato dopo che l'helper è stato creato, quindi rinfrescando le posizioni si ripristina l'altezza. Probabilmente jQuery dovrebbe farlo da solo, ma per ora sono felice.

+0

Così forceHelperSize (http://jqueryui.com/demos/sortable/#option-forceHelperSize) era inutile? – jakeisonline

+4

@John Holy crap, vorrei poter revocare questo +1000 volte. – shmeeps

+0

Sono d'accordo con shmeeps! Ero a una perdita completa – orourkedd

3

Di seguito ha lavorato per me:

stop: function(event,ui){ 
    ui.item.height("auto"); 
} 
+0

anche per me, non so perché non è la risposta in upvoted –