Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在动态加载图像的情况下获取元素的高度_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何在动态加载图像的情况下获取元素的高度

Javascript 如何在动态加载图像的情况下获取元素的高度,javascript,jquery,html,Javascript,Jquery,Html,我有很多表,在最后一个td中,在最后一个tr中,我把来自后端的消息放进去。可能不仅有文本,还有图像(标记中指向它们的url),因此它们可以动态加载。我需要得到这张桌子的高度,如果它超过400,我就加一些康坦特 首先,我这样做: $("table[name]='forum'").each(function() { var height = $(this).height(); if (height > 400) { var redirec

我有很多表,在最后一个td中,在最后一个tr中,我把来自后端的消息放进去。可能不仅有文本,还有图像(标记中指向它们的url),因此它们可以动态加载。我需要得到这张桌子的高度,如果它超过400,我就加一些康坦特

首先,我这样做:

$("table[name]='forum'").each(function() {
        var height = $(this).height();
        if (height > 400) {
            var redirect = $("#backUrl").val() + "#" + $(this).find("[name]='answ'").attr("id");
            $(this).find("tr:last-child > td:last-child").append(function() {
                return "<div></div><a style='float: right' href='"+ redirect + "'><img src='/images/arrow_up.png'></a>";
            });
        };
    });
但我理解,这是错误的,因为img可能会在该块完成后加载。我做了一些其他的动作,但它不会影响我想要的


这个问题的解决办法是什么?因为它计算不带img标记的整个元素的高度。

要获得最终的表格高度(如果img会影响高度,或者您可以预先设置一些最大高度),您必须等待加载所有图像

var table = $(this), imgs = table.find("img"), len = imgs.length;

imgs.one('load', function() {

    len--;

    //now all image loaded
    if (len == 0) {

        //here you got the final height
        height = table .height();

        //do stuffs here
    }

}).each(function() {

    if (this.complete)
        $(this).load();
});
它不会每次都起作用),因为可能会有几个图像,它们可以躺成一排,或者一个接一个。因此,如果高度低于所需的高度,但它是一个接一个的-这不起作用。因此,在我看来,正确的方法是等待所有图像加载,然后获取高度
$(this).find("img").load(function() {
     height += $(this).height(); 
});
var table = $(this), imgs = table.find("img"), len = imgs.length;

imgs.one('load', function() {

    len--;

    //now all image loaded
    if (len == 0) {

        //here you got the final height
        height = table .height();

        //do stuffs here
    }

}).each(function() {

    if (this.complete)
        $(this).load();
});