JavaScript错误:未捕获的TypeError:无法读取未定义的属性“left”

时间:2016-02-09 18:03:45

标签: javascript jquery css console.log

这是一个非常烦人的错误,似乎有关于此控制台错误的各种问题。它并没有让我在使用chrome的控制台中工作很多。

 /**
     * Dropdown menu positioning
     */
    loc.dropMenuPositioning = function (){
        var dropMenu = $('.js-dropdown-item-wrap');
        var mainNavigationOffset = $('.js-nav-container > ul').offset();
        var mainNavigationPosition = mainNavigationOffset.left;
        dropMenu.css({'left' : mainNavigationPosition - 60});
    };

对不起,我对这个问题没什么好处。任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:3)

您正在从上一行返回的对象中读取 left 属性。失败的一行是:

var mainNavigationPosition = mainNavigationOffset.left;

错误意味着mainNavigationOffset未定义。

因为mainNavigationOffset设置为:

var mainNavigationOffset = $('.js-nav-container > ul').offset();

jquery可能无法获得元素$(' .js-nav-container> ul')的偏移量。

如jquery文档所述:

  

注意:jQuery不支持获取隐藏的偏移坐标   元素或计算边界,边距或填充   身体元素。

     

虽然可以获得元素的坐标   visibility:hidden set,display:none从渲染中排除   树,因此有一个未定义的位置。

检查该元素是否实际可见。

另一种选择(看起来真的发生了)是jquery表达式:

$('.js-nav-container > ul')

未返回任何元素。

要查看元素是否可见,您可以使用chrome dev工具:

display 不得等于none display should not be equals to none

可见性必须等于可见 visibility should be equals to visible

或者您只需在控制台中执行:

$('.js-nav-container > ul').css("display");
$('.js-nav-container > ul').css("visibility");

答案 1 :(得分:1)

试试这个,jQuery doc

dropMenu.offset({ left: mainNavigationPosition - 60 });

否则,您可能需要将位置设置为绝对或相对:

link

答案 2 :(得分:1)

检查您的jQuery版本是否高达1.2,.offset()方法可能无法在旧版本中使用。

jQuery 1.2 change log