Я не понимаю, почему моя функция не работает, и почему я продолжаю получать "test is not defined error", когда я пытаюсь запустить ее.
Я хочу, чтобы страница прокручивалась вниз до соответствующего раздела, когда пользователь нажимает на правый пункт меню.
<ul class="timelineNav">
<li class="navItem">
<button type="button" onclick='test("1")'>
Event1
</button>
</li>
<li class="navItem"><a class="navItem" href="url">Event2</a></li>
<li class="navItem"><a class="navItem" href="url">Event3</a></li>
<li class="navItem"><a class="navItem" href="url">Event4</a></li>
<li class="navItem"><a class="navItem" href="url">Event5</a></li>
</ul>
<article id="post1">
some text
</article>
<article id="post2">
some text
</article>
<article id="post3">
some text
</article>
Функция Javascript:
function test(postLocation){
var post = $('#post'+postLocation).offset();
$(window).scrollTop(post.top);
};
Я изначально хотел, чтобы элемент списка сам начал функцию, но я думаю, что это должна быть кнопка?
Вы не показываете, где определена функция test()
, но если она находится внутри обработчика документа (или любой другой функции), она не находится в глобальной области, поэтому ее нельзя вызывать из атрибута onclick
.
Или:
(1) Прекратите использование атрибута onclick
и привяжите обработчик события клика к элементам.
(2) Переместите определение функции вне обработчика документа.
(3) Определите функцию следующим образом:
window.test = function(postLocation) {
var post = $('#post'+postLocation).offset();
$(window).scrollTop(post.top);
};
Кроме того, вам не нужно использовать кнопку. Вы должны иметь возможность сделать это, чтобы функция выполнялась щелчком по элементу списка.
Я предлагаю следующее:
HTML:
<ul class="timelineNav">
<li><a href="#post1">Event 1</a></li>
<li><a href="#post2">Event 2</a></li>
<li><a href="#post3">Event 3</a></li>
<li><a href="#post4">Event 4</a></li>
</ul>
<article id="post1">
some text
</article>
<article id="post2">
some other text
</article>
JQuery:
$('.timelineNav').children('li').children('a').click(function(event) {
event.preventDefault();
var $article = $($(this).attr('href'));
$(window).scrollTop($article.offset().top);
});
Хотя элементы <a>
не нужны, они приводят к изменению указателя мыши.
Обновлен HTML
Добавлен идентификатор кнопки для лучшего выбора jquery
<ul class="timelineNav">
<li class="navItem">
<button type="button" id="clickbutton">Event1</button>
</li>
...
JS Прикрепите событие к вашей кнопке, удалите встроенное событие
$(function () {
$('.navItem').on('click', '#clickbutton', function () {
var location = 1; //define or fetch your location here
var post = $('#post' + location).offset();
alert(post);
$(window).scrollTop(post.top);
});
});