2013-10-06 5 views
0

Я сделал некоторые Jquery, которые вы можете увидеть с этой скрипкой ниже: http://madaxedesign.co.uk/dev/Test/ http://jsfiddle.net/x82mU/1/как решить эту ошибку JQuery?

Код:

$(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'); 
     } 
    }); 
}); 
}); 

Но она тянет через эту ошибку: Uncaught TypeError: Не удается прочитать свойство «топ 'undefined

Это препятствует работе моей следующей части JQuery.

Мне было интересно, может ли кто-нибудь сообщить мне, почему, или дать мне решение?

Большое спасибо

+0

это '$ (это) .attr («HREF»)' – omninonsense

ответ

2

Вы пытаетесь получить селектор из 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

+0

, так что я должен поставить .offset (href), чтобы у него было что-то, чтобы идентифицировать его? – MaxwellLynn

+0

@MaxwellLynn Что вы пытаетесь сделать? У вас нет элемента, указанного как href во многих элементах меню. – PSL

+0

Я пытаюсь получить ссылку на нас, чтобы прокручивать красиво, а не переходить на страницу с информацией о нас. Кажется, что это хорошо. Однако у меня есть заявленная выше ошибка, которая нарушает мою следующую часть кода, которая представляет собой раскрывающуюся навигацию, которая используется для мобильных устройств. Вы можете видеть это в действии с помощью ссылки madaxedesign, если вы минимизируете экран – MaxwellLynn

1
var href = $(this).attr('href'); 

обновление как комментарий

для

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

на работу,

href 

вар iable должен быть элементом на странице.

так что если ваша ссылка как

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

это будет хорошо.

JQuery создание объекта дома

$(dom_element) 

цель HTML-теги, классы, идентификаторы или существующие объекты Dom (окна, документ ..)

+0

То за помощь, но что сохранил ту же самую ошибку, предотвращающий ее от чтения следующей части Jquery. Возможно ли, что вы знаете другую причину? – MaxwellLynn

+0

Спасибо за вашу легенду. – MaxwellLynn

Смежные вопросы