Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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_Backbone.js - Fatal编程技术网

Javascript 为什么不能获取元素';第一次加载页面时主干中的大小是多少?

Javascript 为什么不能获取元素';第一次加载页面时主干中的大小是多少?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,在CSS中,元素的高度和宽度设置为自动。我想在第一次加载页面后获得此元素的高度。我检查$(“#minor”),它确实有clientHeight:333,clientWidth:826,但无法获取clientHeight,clientWidth,offsetHeight和offsetWidth的值。但是,我可以正确地获得$('#minor')的其他属性 顺便说一下,我可以得到#gallery和#image_holder的clientWidth,尽管它们的宽度也设置为auto 对于clientHei

在CSS中,元素的高度和宽度设置为自动。我想在第一次加载页面后获得此元素的高度。我检查$(“#minor”),它确实有clientHeight:333,clientWidth:826,但无法获取clientHeight,clientWidth,offsetHeight和offsetWidth的值。但是,我可以正确地获得$('#minor')的其他属性

顺便说一下,我可以得到#gallery和#image_holder的clientWidth,尽管它们的宽度也设置为auto

对于clientHeight,无法正确获取所有元素的clientHeight,它总是返回20

主干视图代码:

var SubheaderView = Backbone.View.extend({
    id: 'gallery',
    tagName: 'div',

    initialize: function() {
        $(window).on('resize', this.updateCss); #=> it works correctly
        this.render();
    },

    render: function() {
        this.$el.append(subheaderTemplate);
        var that = this;
        _.defer(function(){
            that.updateCss();
        });

        return this;
    },

    updateCss: function() {      
        console.log($('#minor')[0].clientHeight); #=> it still return 20
        console.log($('#minor')[0].clientWidth); #=> it still return 0
        console.log($('#minor')[0].localName); #=> it return div
    }
});
副标题模板html代码:

<div id="image_wrapper">
    <div id="image_holder">
        <div class="image_item" id="major">
            <img src="media/images/test/image1.png" alt="major image">
        </div>

        <div class="image_item" id="minor">
            <img src="media/images/test/image2.png" alt="minor image">

            <div id="cover">
                <h1>Over 196 Homes<br>Sold a Week<br>Through Real Estate</h1>
            </div>
        </div>

        <div class="image_item">
            <img src="media/images/test/image3.png"alt="image">
        </div>
        <div class="clearfix"></div>
    </div>
</div>

高度和宽度的计算是基于其他元素的,所以我相信浏览器在加载更多页面后才能告诉您。即使是
延迟
也可能不够延迟,因为它只有1ms

您是否尝试过将您的身高检查代码放入一个
$
块中,类似这样的内容

$(function() {
    alert($('#minor').height());
});
如果不是,我会试试,甚至可能:

$('body').on('load', function() {
    alert($('#minor').height());
});

\uu0.defer
使代码异步,但它不能保证您的映像在调用之前已完成加载。
将被添加到dom中,但是图像是异步加载的,因此不可能在调用
updateCss()之前完成加载

您应该尝试向映像添加
onload
处理程序:

render: function() {
    this.$el.append(subheaderTemplate);
    var that = this;
    $("#minor").on("load", function() {
        that.updateCss();
    });

    return this;
},

应该注意的是,加载事件在
上不是标准的,所以要小心。

当您检查其高度时,SubHeaderView附加到的元素是否已经插入到DOM中?是,uu.defer()执行此操作。如果没有u.defer(),我甚至无法在css中获得固定高度。因为您的视图id是gallery,我必须问,您的subheaderTemplate?、images?上到底有什么,以防万一,请检查您的div是否确实有高度,有时取决于您的css,它可能看起来正常工作,但高度为0,这可能不是问题,但是,请确定。嗨,扎里奇,它们是图片,我也发布了html和css代码。嗨,扎里奇,它们是图片,我也发布了html和css代码。顺便说一下,我可以得到#gallery和#image_holder的clientWidth,尽管它们的宽度也设置为auto。但是我无法正确获取.image\u项目的clientWidth,它返回0。我无法正确获取所有元素的clientHeight,它返回20。
render: function() {
    this.$el.append(subheaderTemplate);
    var that = this;
    $("#minor").on("load", function() {
        that.updateCss();
    });

    return this;
},