如何通过AJAX插入内容后获取元素的高度?

fre*_*ent 5 javascript css ajax jquery height

我有一个Jquery Mobile页面,我正在通过AJAX加载表单.我正在使用插件设置页面尺寸,该插件在Ajax运行之后计算尺寸并且布局已更新(之后至少下面的控制台进入).

我需要获得接收内容的元素的高度,但无论我尝试什么,我只是变得垃圾(~169px而不是1200px)

这是我的代码:

(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')) ;
        };
    }
     ...
Run Code Online (Sandbox Code Playgroud)

如果我没有使用任何AJAX,这可以正常工作.如果我通过AJAX动态添加内容,那么控制台都会在AJAX之后触发,但仍然只返回false值.

问题:
如何在AJAX更新后可靠地获取内容元素高度?我尝试在Ajax之后设置10秒超时,等待一切都在那里.没有区别,10秒后内容元素高度仍然不正确.

感谢帮助!

编辑:
虽然控制台记录在AJAX加载后,我认为该功能之前正在触发,因此它是根据预AJAX尺寸计算的.我想用这个重新开火:

$(window).on('dimensionchange', function(){             
    self.ome();
    })
Run Code Online (Sandbox Code Playgroud)

并触发

$(窗口).trigger( 'dimensionchange')

在我的AJAX成功处理程序中.不完美,但我想这会做.

EDIT2:
搞定了.@HolgerDSchauf是对的.在我的第一次函数运行中,我设置了false值,然后在AJAX进入后,仍然设置了false值.我现在正在修理它:

Ajax成功:

...
// cleanup dimensions
$(window).trigger( 'dimensionclear');
...
window.setTimeout(function() {
   target.removeClass('.fade.in');
   // recalculate
   $(window).trigger('dimensionchange');    
   },250);
Run Code Online (Sandbox Code Playgroud)

在我的插件中:

$(window).on('dimensionchange', function(){ 
     self.ome();
     });
$(window).on('dimensionclear', function(){
     self.ome("clear");
     });    
Run Code Online (Sandbox Code Playgroud)

并在OME功能:

// cleanup
if ( from == "clear") {
   contents.css({'height':'', 'max-height':''})
   return;
   }
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

Hol*_*auf 1

您使用了带有“wrap、panels、ct”的缓存元素刷新此缓存变量或立即使用它