Ho una pagina Jquery Mobile in cui sto caricando un modulo tramite AJAX. Sto impostando le dimensioni della pagina usando un plugin, che calcola le dimensioni DOPO che Ajax è stato eseguito e il layout è stato aggiornato (almeno le console sottostanti arrivano in seguito).come ottenere l'altezza di un elemento dopo aver inserito il contenuto tramite AJAX?
ho bisogno di ottenere l'altezza dell'elemento che ha ricevuto il contenuto, ma non importa quello che cerco, sto solo diventando spazzatura (~ 169px al posto di qualche 1200px)
Ecco il mio codice:
(inside plugin)
some: function(){
var self = this,
o = self.options,
wrap = $('div:jqmData(wrapper="true").ui-page-active').last(),
// elements
panels = wrap.find('.ui-panel.ui-panel-active').filter(':not(.ui-popover)'),
pages = panels.find('.ui-page'),
contents = pages.find('.ui-content');
// maxHeight contents
for (var i = 0; i < contents.length; i++){
ct = contents.eq(i);
console.log(ct);
console.log(ct.css("height"))
console.log(ct.height());
console.log(ct.outerHeight());
// max
if (ct.css("height") > parseFloat(o._iPadFixHeight)){
o._iPadFixHeight = parseFloat(ct.css("height")) + parseFloat(ct.css('padding-top')) + parseFloat(ct.css('padding-bottom')) ;
};
}
...
Se non utilizzo alcun AJAX, questo funziona correttamente. Se aggiungo il contenuto dinamicamente tramite AJAX, le console si attivano dopo AJAX, ma restituiscono solo valori falsi.
Domanda:
Come posso ottenere l'altezza in modo affidabile elemento di contenuto dopo un aggiornamento AJAX? Ho provato a impostare un timeout di 10 secondi dopo che Ajax ha aspettato fino a quando tutto è arrivato. Nessuna differenza, dopo 10 secondi l'altezza dell'elemento del contenuto non è ancora corretta.
Grazie per l'aiuto!
EDIT:
Anche se le console di registro dopo il carico AJAX, penso che la funzione è sparare prima, quindi è calcualting in base alle dimensioni pre-AJAX. Sto pensando di ri-il-fuoco di utilizzare questo:
$(window).on('dimensionchange', function(){
self.ome();
})
e innescando
$ .trigger (finestra) ('dimensionchange')
nel mio gestore successo AJAX. Non perfetto, ma credo che lo farà.
EDIT2:
Got a farlo funzionare. @HolgerDSchauf era corretto. Durante la mia prima esecuzione della funzione, ho impostato i valori falsi e quindi dopo che AJAX è entrato, il valore falso era ancora impostato. Ora sto fissandolo in questo modo:
Ajax Successo:
...
// cleanup dimensions
$(window).trigger('dimensionclear');
...
window.setTimeout(function() {
target.removeClass('.fade.in');
// recalculate
$(window).trigger('dimensionchange');
},250);
Nel mio plugin:
$(window).on('dimensionchange', function(){
self.ome();
});
$(window).on('dimensionclear', function(){
self.ome("clear");
});
E in OME funzione:
// cleanup
if (from == "clear") {
contents.css({'height':'', 'max-height':''})
return;
}
funziona come un fascino .
È possibile che nel contenuto caricato siano presenti immagini prive di altezza predefinita e che lo script indichi l'altezza della parte html senza immagini in quanto non sono ancora state caricate? –
@AidaBendoraitis: no.L'elemento predefinito è vuoto (tranne un'intestazione). – frequent