2016-04-01 3 views
0

Я пытаюсь передать функцию в качестве аргумента другой функции.Функция как аргумент для другой функции JQuery

//Scroll To + Remove Class if exists 


$(document).on("click", "a[href^=\\#]", function() { 

    $("html, body").animate({ 

     scrollTop: $('section[data-attr-target="'+this.hash.slice(1)+'"]').offset().top }, 300); 

    return false; 

}, fun()); 

function fun() { 

    if(("menu").hasClass("active")) { 

    $("menu").removeClass("active"); 

    } 
} 

JS Bin full example

Что я ожидаю от моей функции:

  1. Нажмите событие
  2. Выделите раздел
  3. весело() запускается и проверяет ли "меню" $ () имеет класс «active», если он его удаляет.

весело() среди аргументов функции нарушает поведение (без него функция работает для прокрутки к элементу), но мне нужно удовольствие() проверить класс элемента $ («меню»).

Пожалуйста, объясните, что я делаю неправильно.

+1

JQuery в 'на()' не принимает два обратных вызовов, вы, вероятно, хотел назвать эту функцию ** перед тем ** 'вернуться ложным; }, 'part, сразу после анимационной части, это то, что вы действительно хотели сделать -> ** https: //jsfiddle.net/qxkmygzb/** – adeneo

+0

Если я положу функцию fun() перед« return false », не проверяет класс, он не выполняется, как я могу понять –

+0

FYI: вам не нужно ничего проверять, чтобы удалить класс, просто сделайте так, как в скрипке, которую я разместил выше – adeneo

ответ

1

Вам необходимо использовать complete function, который вызывается после завершения анимации по элементу.

Вот пример http://jsfiddle.net/tg5op333/29/

$(document).on("click", "a[href^=\\#]", function() { 
    $("html, body").animate({ 
     scrollTop: $('section[data-attr-target="'+this.hash.slice(1)+'"]').offset().top}, 
     {duration: 300, 
     specialEasing: { 
     width: "linear", 
     height: "easeOutBounce" 
     }, 
     complete: function() { 
      fun(); 
     } 
    }); 
}); 
Смежные вопросы