Javascript Uncaught TypeError在一个页面上,但下一个工作?

时间:2013-01-23 17:58:43

标签: javascript jquery wordpress

在将鼠标悬停在导航菜单栏上时,在wordpress网站上工作并添加滑动标记。

网站 - http://avuedesigns.com/iaq

在chrome Developer工具中,它显示以下错误:

Uncaught TypeError: Cannot read property 'left' of undefined script.js:242
(anonymous function) script.js:242
v.event.special.(anonymous function).handle jquery.js:2
v.event.dispatch jquery.js:2
o.handle.u

菜单上唯一可用的页面是购物车页面和我的帐户。我假设它可能与图书馆的冲突,因为我几天前有类似的情况。但我不知道解决这个问题的正确方法,并希望找到指导,所以我不会浪费任何人的时间来处理简单的问题。

我知道标记在工作页面上已关闭,没有时间调整它,想让它先工作= P.

感谢您的时间和智慧。

2 个答案:

答案 0 :(得分:1)

好像你正在使用错误的类来获取script.js @Line 231中#slidingArrow的位置值:

activeItem = menuList.find('.current_page_item, .current_page_ancestor, .current_page_parent');

我认为您最适​​合为.current_page_item换出.current-menu-item.current_page_item类似乎没有在所有页面上填充,因此#slidingArrow div元素无法获取任何定位信息。

在script.js中,这是我对menuSlidingArrow()所做的更改:

function menuSlidingArrow() {

    if(!($j('html').hasClass('oldie'))) {

        var mainmenu    = $j('.menu-content'),
            arrow       = $j('#slidingArrow'),
            menuList    = mainmenu.find('ul.menu'),
            activeItem  = menuList.find('.current-menu-item, .current_page_ancestor, .current_page_parent'); //remove .current_page_item

        $j(window).load(function() {
            arrow.css({ 'left':(activeItem.position().left + ((activeItem.outerWidth() - 48)/2) ) -6});
            arrow.fadeIn('slow');
        });

        menuList.children().hover(function(){
            arrow.animate({ 'left':($j(this).position().left + (($j(this).outerWidth() - 48)/2) ) -6},
                { queue: false, easing: 'easeOutQuad', duration: 250 });
        },function(){
            arrow.animate({ 'left':(activeItem.position().left + ((activeItem.outerWidth() - 48)/2) ) -6},
                { queue: false, easing: 'easeOutQuad', duration: 250 });
        });
    }

}

我还需要以下CSS来使其工作:

#menu-main-menu {
    margin-left:68px;
}
#menu-item-8197 a { /* hide home navigation item */
    color:#fff;
}
#slidingArrow {
    margin-left:77px;
}

最后,请务必将“主页”页面添加到顶部导航栏中。您将要将其添加为导航中的第一项。

总而言之,我改变/添加了:

  • .current_page_item已更改为.current-menu-item
  • 添加了#slidingArrow { margin-left: 77px; }menu-item-8197 a { color:#fff; }#menu-main-menu { margin-left:68px; }
  • 修改计算以导航项目
  • 下的#slidingArrow为中心
  • 在导航中添加了主页
  • 隐藏导航中的主页导航元素

让我知道这对您有何影响,如果您遇到任何错误,我很乐意为您纠正我的答案。

答案 1 :(得分:0)

这个函数什么都没有返回,所以activeItem被定义为一个空数组,这就是你的代码不起作用的原因,请在其他页面中检查你发送给menuList.find()函数的参数,看看它们是否是'与众不同。

script.js第231行:

activeItem = menuList.find('.current_page_item, .current_page_ancestor, .current_page_parent');