Scrollto jquery error при нажатии выпадающего меню Bootstrap 4 - PullRequest
0 голосов
/ 24 марта 2019

Я использую bootstrap 4, у меня есть выпадающее меню, и у меня есть скрипт для scrollspy и scrollto. Когда я нажимаю, чтобы открыть раскрывающееся меню, консоль показывает следующую ошибку:

jquery.min.js:2 Uncaught Error: Syntax error, unrecognized expression: http://example.com
at Function.ga.error (jquery.min.js:2)
at ga.tokenize (jquery.min.js:2)
at ga.select (jquery.min.js:2)
at Function.ga [as find] (jquery.min.js:2)
at r.fn.init.find (jquery.min.js:2)
at new r.fn.init (jquery.min.js:2)
at r (jquery.min.js:2)
at HTMLAnchorElement.<anonymous> (scripts.js:27)
at HTMLAnchorElement.dispatch (jquery.min.js:3)
at HTMLAnchorElement.q.handle (jquery.min.js:3)

Вот содержимое файла scripts.js:

$(document).ready(function() {
$(".nav-link,.dropdown-item").click(function() {
    var t = $(this).attr("href");
    $('.active').not('.carousel-item.active').removeClass('active');
    $("html, body").animate({
        scrollTop: $(t).offset().top - 50
    }, {
        duration: 1e3,
    });

    $('body').scrollspy({ target: '#navbar-example',offset: $(t).offset().top });
    $(this).parent().addClass('active');

    return false;
});

});

Строка 27, вызываемая в консоли:

scrollTop: $(t).offset().top - 50

Якорь, с которым у него есть проблема, - это href, используемый для элемента верхнего уровня в раскрывающемся списке - вот HTML:

<a class="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Compute</a>

Чего мне не хватает?

Заранее благодарим за руководство.

1 Ответ

0 голосов
/ 24 марта 2019

Демо-код может быть очень полезным.В любом случае, пока ошибка, которую я вижу, находится в этой строке:

var t = $(this).attr("href");

Вы сохраняете атрибут "href" выбранного элемента в переменной "t".Он хранит значение "href" только в виде строки.так что "t" - это просто строка, а не элемент jquery.Вот почему у него нет доступных смещений () или других полезностей jquery.

Я думаю, что вы хотели сохранить сам элемент при нажатии.Для этого вам нужно хранить только такой элемент:

var t = $(this);

Теперь этот "t" представляет элемент, по которому щелкают, обернутый функциями jquery ($).Вы можете использовать «t» где угодно, вместо $ (это).Например, в строке 27:

scrollTop: t.offset().top - 50

Если это все еще не работает, обновите ваш пост ссылкой на codepen / jsfiddle, чтобы я мог копать дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...