如何选择仅一页的$(窗口)

时间:2015-02-16 14:57:07

标签: jquery

我有控制台错误(Safari网络检查员)我想问题来自$(窗口)。怎么说只有一个页面的窗口?

[Error] TypeError: undefined is not an object (evaluating '$("#altres .amunt").offset().top')
    (anonymous function) (general.js, line 6)
    dispatch (jquery-latest.js, line 4641)
    handle (jquery-latest.js, line 4309)

我有一个完全空的html页面。它有一个普通的js文件:

<script src="general.js"></script>

总的来说。我只有:

$(function(){

    $(window).scroll(function() { 
        var fletxa = $("#altres .amunt").offset().top;
        var finestra = $(window).scrollTop(); 

        if (finestra > fletxa) { 
            $("#altres .amunt").stop().animate({ top: 60 });
        } else {
            $("#altres .amunt").stop().animate( { top: 0} )
        };
    });

})

代码在我有divs divs #altres .amunt的页面中运行良好 在其他页面中,没有div是正常的有错误。我是否应该使用某些东西来告诉它只影响特定页面而不影响其他页面?我想问题来自$(窗口)。怎么说只有一个页面的窗口?

2 个答案:

答案 0 :(得分:1)

如果#altres .amunt不存在,则$("#altres .amunt").offset()undefined。因此,例外情况是,您想要读取某个undefined的属性。

您应检查选择器是否返回某些内容,然后对结果执行操作,例如

var selection = $("#altres .amunt").offset();
if (selection) {
    var fletxa = selection.top
}

顺便说一句,如果您在某些页面中不需要一段JavaScript代码,那么不会包含它们。或者如果你确实包含它们,那么至少使用防御性编码,所以检查前置条件,在这种情况下,检查选择器的返回值。

<强>更新

快速(和肮脏)解决方案

if ($("#altres .amunt").offset()) {
    $(window).scroll(function () { 
        // same as before
    });
}

答案 1 :(得分:0)

如果没有标识为alters的元素,则没有任何内容可以使用offset,并且在尝试时应该会出现错误。