【问题标题】:how to solve this Jquery error?如何解决这个 Jquery 错误?
【发布时间】:2013-10-06 21:19:23
【问题描述】:

我制作了一些 Jquery,你可以在下面的这个小提琴中看到: http://madaxedesign.co.uk/dev/Test/ http://jsfiddle.net/x82mU/1/

代码:

$(document).ready(function() {
var $root = $('html, body ');
$('.scroll a').click(function(e) {
    var href = $.attr(this, 'href');
    $root.animate({
        scrollTop: $(href).offset().top
    }, 500, function () {
        window.location.hash = href;
    });
    return false;
});

// Responsive menu 
$(function() {
    var pull        = $('#pull'),
        menu        = $('nav ul'),
        menuHeight  = menu.height()

    $(pull).on('click', function(e) {
        e.preventDefault();
        menu.slideToggle();
    });

    $(window).resize(function(){
        var w = $(window).width();
        if(w > 320 && menu.is(':hidden')) {
            menu.removeAttr('style');
        }
    });
}); 
 });

但它会出现以下错误: 未捕获的类型错误:无法读取未定义的属性“顶部”

这会阻止我的下一个 Jquery 工作。

我想知道是否有人可以让我知道原因,或者给我一个解决方案?

非常感谢

【问题讨论】:

  • 它是$(this).attr('href')

标签: javascript jquery


【解决方案1】:

您正在尝试从 href 获取选择器,这在您的许多菜单项中都不存在。

即:

    <li><a href="#">Home</a></li>
    <li><a href="#aboutUs">About us</a></li>
    <li><a href="#">Portfolio</a></li>        
    <li><a href="#">Contact us</a></li>

$(href).offset().top //here offset() of an empty jquery object is undefined.

不是问题,但您可以使用this.href 而不是$.attr(this, 'href')

试试这个:

 $('.scroll a').click(function(e) {
    var href = $(this).attr("href"), $el = $(href), top=0; //default top to 0
       if($el.length)  //if there is element matching the href
          top = $el.offset().top; //set the top
    $root.animate({
        scrollTop: top //now scroll
    }, 500, function () {
        window.location.hash = href;
    });
    return false;
});

Fiddle

【讨论】:

  • 所以我应该放 .offset(href) 以便它可以识别它吗?
  • @MaxwellLynn 你想做什么?您没有在许多菜单项中将元素指定为 href。
  • 我试图让关于我们的链接很好地滚动,而不是跳转到页面的关于我们的部分。这似乎做得很好。但是,我遇到了上述错误,它破坏了我的下一段代码,即用于移动设备的下拉导航。如果您最小化屏幕,您可以从提供的 madaxedesign 链接中看到这一点
  • @MaxwellLynn 您需要处理# 场景,请参阅我的答案更新。
  • 传奇。感谢您的帮助!
【解决方案2】:
var href = $(this).attr('href');

更新为评论

scrollTop: $(href).offset().top

为了工作,

href

变量必须是页面上的一个元素。

所以如果你的链接是这样的

<a href="#an_id_to_a_div">...</a>

会好的。

jquery dom 对象创建

 $(dom_element) 

以 html 标签、类、id 或现有的 Dom 对象(窗口、文档..)为目标

【讨论】:

  • 那是为了提供帮助,但仍然存在相同的错误,阻止它读取下一段 Jquery。您是否可能知道其他原因?
  • 谢谢你的传奇。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2011-09-16
相关资源
最近更新 更多