#undefined в адресной строке

252
15 декабря 2016, 16:31

Для плавный прокрутки использую данный код:

$(document).ready(function() {
    $(".navbar-default ul li a[href^='#']").on('click', function(e) {
        // prevent default anchor click behavior
        e.preventDefault();
        // animate
        $('html, body').animate({
            scrollTop: $(this.hash).offset().top
        }, 400, function() {
            // when done, add hash to url
            // (default click behaviour)
            window.location.hash = this.hash;
        });
    });

При клике на ссылку в адресной строке добавляется #undefined вместо значения hash этой ссылки.

Верстка

Answer 1

this внутри функции, вызываемой при завершении анимации, указывает на элемент, для которого была вызвана анимация. В данном случае, сначала на html, затем на body.

Имеет смысл сохранить a в отдельную переменную перед вызовом анимации. Например, так: var that = this;, после чего использовать window.location.hash = that.hash;

Итоговый код (я убрал html из html, body, чтобы функция вызывалась лишь один раз):

$(document).ready(function()
{
    $(".navbar-default ul li a[href^='#']").on('click', function(e)         
    {
        e.preventDefault();
        var that = this;
        $('body').animate({
            scrollTop: $(this.hash).offset().top
        }, 400, function() {
            window.location.hash = that.hash;
        });
    });
});

Пример в fiddle.

Answer 2

В том, что вы пытаетесь взять значение там, где его нет:

window.location.hash = this.hash;
                       ^^^^^^^^^

this в данном контексте - просто HTML-элемент, у него нет свойства hash. Вы можете получить адрес (href) ссылки, по которой кликнули, следующим образом:

window.location.hash = $(this).attr('href');

Это создаст jQuery-обертку над текущим элементом, а затем получит атрибут href. не забудьте также заменить и более ранние вхождения.

READ ALSO
Яндекс метрика везде

Яндекс метрика везде

При загрузке любых сайтов, в исходном коде обнаружил одну и туже строку в блоке head

285
Как добавить вкладку instagram в виджет на wordpress?

Как добавить вкладку instagram в виджет на wordpress?

Всем привет! Хочу добавить вкладку инстаграма в виджет на wordpressДелаю по аналогии с контактом, есть пример как должно выглядеть, но пока не пойму...

302
Canvas не рисует, находясь в display: none блоке

Canvas не рисует, находясь в display: none блоке

У меня есть модальное окно:

297