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

Sin*_*ton 5 javascript css jquery 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});
    };
Run Code Online (Sandbox Code Playgroud)

对不起,我在这个问题上没有更多的内容.任何帮助将不胜感激.谢谢.

Mar*_*eri 4

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

var mainNavigationPosition = mainNavigationOffset.left;
Run Code Online (Sandbox Code Playgroud)

该错误意味着 mainNavigationOffset 未定义。

因为 mainNavigationOffset 设置为:

var mainNavigationOffset = $('.js-nav-container > ul').offset();
Run Code Online (Sandbox Code Playgroud)

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

正如 jquery 文档所述:

注意:jQuery 不支持获取隐藏元素的偏移坐标,也不支持在 body 元素上设置边框、边距或填充。

虽然可以获取设置了visibility:hidden的元素的坐标,但display:none被排除在渲染树之外,因此具有未定义的位置。

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

另一个选择(这似乎是真正发生的事情)是 jquery 表达式:

$('.js-nav-container > ul')
Run Code Online (Sandbox Code Playgroud)

不返回任何元素。

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

显示不能等于无 显示不应等于无

可见性必须等于可见 可见性应该等于可见

或者您可以简单地在控制台中执行:

$('.js-nav-container > ul').css("display");
$('.js-nav-container > ul').css("visibility");
Run Code Online (Sandbox Code Playgroud)