#javascript #function #for-loop #undefined
#javascript #функция #for-цикл #не определено
Вопрос:
Я пытаюсь вывести функцию за пределы цикла, а затем вызвать ее изнутри, но я не уверен, как это сделать.
const links = document.querySelectorAll( 'a' );
for ( let i = 0; i < links.length; i ) {
links[i].addEventListener( 'click', ( event ) => {
const targetID = '#' === event.currentTarget.getAttribute( 'href' ) ? 'start' : event.currentTarget.getAttribute( 'href' );
...rest of the function...
} );
}
Это то, что я пробовал до сих пор:
const links = document.querySelectorAll( 'a' );
function smoothScrolling( event ) {
const targetID = '#' === event.currentTarget.getAttribute( 'href' ) ? 'start' : event.currentTarget.getAttribute( 'href' );
...rest of the function...
}
for ( let i = 0; i < links.length; i ) {
links[i].addEventListener( 'click', smoothScrolling( event ) );
}
Я не уверен, почему, но я получаю следующую ошибку: Uncaught TypeError: Cannot read property 'currentTarget' of undefined
.
Комментарии:
1.
links[i].addEventListener( 'click', smoothScrolling);
2.
func()
является вызовом функции.func
это ссылка / передача функции.
Ответ №1:
У вас почти получилось… Проблема в том, что вы ВЫЗЫВАЕТЕ функцию и передаете результат. Вместо этого вы просто хотите передать саму функцию, как будто это был объект. Попробуйте это:
const links = document.querySelectorAll( 'a' );
function smoothScrolling( event )
{
const targetID = '#' === event.currentTarget.getAttribute( 'href' ) ? 'start' :
event.currentTarget.getAttribute( 'href' );
...rest of the function...
}
for ( let i = 0; i < links.length; i )
{
links[i].addEventListener( 'click', smoothScrolling );
}
Если указать функцию без каких-либо аргументов, она будет передана вместо вызова. То, как вы это сделали, заключается в вызове smoothScrolling и последующем использовании этого результата, а это не то, что вы хотите.
Комментарии:
1. Большое тебе спасибо, мой друг! Это сделало свое дело 🙂 Иногда я так устаю, что пропускаю самые очевидные вещи Dx