@Sergey750il

Почему событие click работает только с анонимной функцией?

Если передаю в функцию click в качестве параметра именную функцию то не работает скрипт, а когда эту же функцию передаю в тело анонимной функции то все отлично. Читал документацию по click, там передается именная функция в качестве параметра и нет никаких примечаний.
var targetscroll = document.getElementById('target-scroll');


    function scrollToElement(theElement) {
    var selectedPosX = 0;
    var selectedPosY = 0;
  
    while (theElement !== null) {
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }
                                      
    window.scrollTo(selectedPosX,selectedPosY);
}

$('.nav-tabs_img li').click(scrollToElement(targetscroll));

А когда делаю таким образом то все работает.
var targetscroll = document.getElementById('target-scroll');


    function scrollToElement(theElement) {
    var selectedPosX = 0;
    var selectedPosY = 0;
  
    while (theElement !== null) {
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }
                                      
    window.scrollTo(selectedPosX,selectedPosY);
}

$('.nav-tabs_img li').click(function() {
   scrollToElement(targetscroll);
});
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
abyrkov
@abyrkov
JavaScripter
Вы передаете не функцию, а ее результат.
$(...).click(scrollToElement(targetscroll));
Скобочки - это знак вызова. Т.е. сначала выполняется функция scrollToElement(targetscroll), а потом уже ее результат передается в .click(...). Правильно:
$(...).click(scrollToElement.bind(null, targetscroll));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы