未捕获的TypeError:无法读取未定义的属性“top” - Jquery

时间:2015-04-09 09:33:12

标签: javascript jquery

如果这个问题已经提出,我道歉。我尝试了很多。但是没有成功。如果我的.div1工作正常。但我删除了.div1。控制台通过如下错误。怎么能解决这个问题。

  

未捕获的TypeError:无法读取属性' top'未定义的

JS Fiddle

HTML

<div class="div">Console error</div>
<!-- <div class="div1">Working</div>-->
<div class="div2">2</div>

JQuery的

function resize() {
var position= $('.div1').offset();
var top= position.top;
    var newtop = top + 60 + "px";
    $('.div2').css( {
        'top': newtop 
    });
}

$(window).resize(function(){
   resize();
});

window.onload = resize();

CSS

.div1
{
    position:fixed;
    top: 40px;
}
.div2
{
    position:fixed;
}

JS Fiddle

3 个答案:

答案 0 :(得分:4)

问题是因为您试图获取DOM中不存在的元素的offset(),因此返回null。然后,您尝试从导致错误的null值中检索属性。

相反,在将值指定给top时,您需要检查是否正确分配了position。试试这个:

var top = position ? position.top : 0;

请注意,如果可用,这将设置为position.top的值,否则将设置为0

答案 1 :(得分:2)

您需要测试选择器是否匹配任何内容。

function resize() {
    var position= $('.div1').offset();
    if (position) {
        var top= position.top;
        var newtop = top + 60 + "px";
        $('.div2').css( {
            'top': newtop 
        });
    }
}

答案 2 :(得分:-1)

不要罢工 div with class="div1" ... 你的jquery是针对那个div。

<div class="div">Console error</div>
<div class="div1">Working</div>
<div class="div2">2</div>
相关问题