@DeniSidorenko

Почему не получаю атрибут Href?

$('a[href^="#"]').click(function () { 
  elementClick = $(this).attr("href");
  destination = $(elementClick).offset().top;
  if($.browser.safari){
    $('body').animate( { scrollTop: destination }, 1100 );
  }else{
    $('html').animate( { scrollTop: destination }, 1100 );
  }
  return false;
});


Добрый день , подскажите пожалуйста, есть такой скрипт . Но не работает. Ошибка
app.js:305 Uncaught ReferenceError: elementClick is not defined
Как я понял в this мы получаем именно сылку, проверил, однако .attr никак не работает, много пробовал но ничего
  • Вопрос задан
  • 668 просмотров
Решения вопроса 3
var пропустили. Наверное работаете в строгом режиме.

var elementClick = $(this).attr("href");
var destination = $(elementClick).offset().top;
Ответ написан
neuotq
@neuotq
Прокрастинация
Ваши переменные еще не объявлены (ранее в коде), нужно объявить их с помощью ключевого слова var, они буду видны только внутри анонимной функции
$('a[href^="#"]').click(function () { 
 var elementClick = $(this).attr("href");
  var destination = $(elementClick).offset().top;
  if($.browser.safari){
    $('body').animate( { scrollTop: destination }, 1100 );
  }else{
    $('html').animate( { scrollTop: destination }, 1100 );
  }
  return false;
});


Сниппет для плавного скролла:
// Выбираем все ссылки с хэшем
    $('a[href*="#"]')
/* Убираем ненужные, либо те которые нужны для других целей, например для галерей, так что сюда можешь добавить список хешей на который плавный скролл не будет реагировать */
        .not('[href="#"]')
        .not('[href="#0"]')
        .click(function(event) {
            // Проверяем что все хеши на том домене
            if (
                location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
                &&
                location.hostname == this.hostname
            ) {
                // Находим цель
                var target = $(this.hash);
                target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
                // Существует ли целевой элемент?
                if (target.length) {
                    // Блокируем поведение по умлочанию, только в случае если анимация на понадобилась
                    event.preventDefault();
                    $('html, body').animate({
                        scrollTop: target.offset().top
                    }, 1000, function() {
                        // Callback after animation
                        // Меняем фокус (бывает полезно, обычно не мешает)
                        var $target = $(target);
                        $target.focus();
                        if ($target.is(":focus")) { // Получил ли целевой элемент фокус
                            return false;
                        } else {
                            $target.attr('tabindex','-1');
                            $target.focus(); 
                        };
                    });
                }
            }
        });
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Проблема не в том, что вы значение атрибута не можете получить, а в том, что переменная elementClick не существует. Проверьте код на опечатки, добавьте var перед переменными.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы