【问题标题】:Function as argument to another function JQuery函数作为另一个函数 JQuery 的参数
【发布时间】:2016-07-21 18:50:15
【问题描述】:

我正在尝试将一个函数作为参数传递给另一个函数。

//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. fun() 启动并检查 $("menu") 是否具有“活动”类,如果是,则将其删除。
函数参数中的

fun() 会破坏行为(没有它的函数适用于滚动到元素),但我需要 fun() 来检查 $( "菜单") 元素。

请解释一下我做错了什么。

【问题讨论】:

  • jQuery 的 on() 不需要两个回调,您可能想在 before return false; }, 部分调用该函数,就在动画部分之后,这就是你的真的很想做 -> jsfiddle.net/qxkmygzb
  • 如果我把 fun() 函数放在“return false”之前,它不会检查类,它不会按照我的理解执行
  • 仅供参考:您无需检查任何内容即可删除课程,只需按照我在上面发布的小提琴中的操作即可
  • 是的,我知道我可以在“主”函数的代码中编写整个函数。但我想知道如何将我的“检查”功能作为参数添加到现有结构中。当然,如果有可能的话。
  • 再一次,参见上面的小提琴,其中动画的回调用于删除类。您不能将您的函数作为第二个回调添加到 click 函数,您将获得的最接近的是作为动画的回调,就像这样 -> jsfiddle.net/qxkmygzb/1

标签: jquery function callback arguments


【解决方案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();
       }
   });
});

【讨论】: