Tengo una página de Jquery Mobile en la que estoy cargando un formulario a través de AJAX. Estoy configurando las dimensiones de la página usando un complemento, que calcula las dimensiones DESPUÉS de que Ajax se haya ejecutado y el diseño se haya actualizado (al menos las consolas siguientes aparecen más adelante).cómo obtener la altura de un elemento después de insertar contenido a través de AJAX?
necesito para obtener la altura del elemento que recibe el contenido, pero no importa lo que intente, sólo estoy recibiendo basura (~ 169px en lugar de algún 1200px)
Aquí está mi código:
(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')) ;
};
}
...
Si no estoy usando ningún AJAX, esto funciona correctamente. Si agrego contenido dinámicamente a través de AJAX, todas las consolas se activan después de AJAX, pero solo devuelven valores falsos.
Pregunta:
¿Cómo puedo obtener de forma fiable la altura del elemento de contenido después de una actualización de AJAX? Traté de establecer un tiempo de espera de 10 segundos después de Ajax para esperar hasta que todo esté allí. No hay diferencia, después de 10 segundos la altura del elemento de contenido aún no es correcta.
¡Gracias por la ayuda!
EDITAR:
Aunque las consolas de registro después de la carga AJAX, creo que la función está disparando antes, así que es calcualting basada en las dimensiones pre-AJAX. Estoy pensando en volver a usar este fuego:
$(window).on('dimensionchange', function(){
self.ome();
})
y provocando
$ .trigger (ventana) ('dimensionchange')
en mi manejador éxito AJAX. No es perfecto, pero supongo que esto servirá.
EDIT2:
Lo tengo para funcionar. @HolgerDSchauf fue correcto. En mi primera ejecución de funciones, configuré los valores falsos y luego de que AJAX ingresara, el valor falso todavía estaba establecido. Ahora estoy fijando de esta manera:
Ajax éxito:
...
// cleanup dimensions
$(window).trigger('dimensionclear');
...
window.setTimeout(function() {
target.removeClass('.fade.in');
// recalculate
$(window).trigger('dimensionchange');
},250);
En mi plugin:
$(window).on('dimensionchange', function(){
self.ome();
});
$(window).on('dimensionclear', function(){
self.ome("clear");
});
Y en función de la OME:
// cleanup
if (from == "clear") {
contents.css({'height':'', 'max-height':''})
return;
}
funciona como un encanto .
¿Puede ser que tenga imágenes en su contenido cargado que no tienen una altura predefinida y su secuencia de comandos está dando el alto de la parte html sin imágenes, ya que aún no están cargadas? –
@AidasBendoraitis: no.El elemento predeterminado está vacío (excepto un encabezado). – frequent