Как избежать Syntax error, unrecognized expression: #

Есть такой js

$('a[href^="#"]').on('click', function (e) {
        e.preventDefault();
        var hrefAttr = $(this).attr("href");
        parent = $(this).closest("ul");
        parent.find("a").removeClass("active");
        $(this).addClass("active");
        if($(hrefAttr).length == 0) {
            location.href='/'+hrefAttr;
        } else {
            if( hrefAttr.length > 0 && hrefAttr != "#") {
                $('html, body').stop().animate({
                    'scrollTop': $(hrefAttr).offset().top-10
                }, 500);
            }
        }
    });

Если элемент $(hrefAttr) отсутствует то нужно перейти по адресу location.href='/'+hrefAttr и проскролить до $(hrefAttr). Скролит хорошо. Но при клике на такую ссылку

<a href="#" data-popup-link="callback">Заказать звонок</a>

Выдает ошибку

jquery.js?ver=1.0:1586 Uncaught Error: Syntax error, unrecognized expression: #

Из-за этого форма плохо работает

Как это исправить?


Ответы (1 шт):

Автор решения: Grundy

Строка # не является допустимым css селектором, поэтому и происходит ошибка.

Для решения достаточно просто проверить, что значение не #.

$('a[href^="#"]').on('click', function(e) {
  e.preventDefault();
  var hrefAttr = $(this).attr("href");
  if (hrefAttr == '#' || $(hrefAttr).length == 0) {
    console.log(1)
  } else {
    console.log(2)
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<a href="#" data-popup-link="callback">Заказать звонок</a>

→ Ссылка