jquery:简单的函数触发器/调用

时间:2013-02-13 13:03:21

标签: jquery function triggers scope

在另一个函数中调用一个函数最简单的方法是什么?

我有:

function carousel_animation(){

            $(carousel).transition({y: m + '=10', queue: false});

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });

            $('article div').promise().done(function(){
                $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
                $(carousel_reset).css({opacity:0});

                $(carousel_content)
                .css({opacity:100, duration:1500});
            });

};

我需要在这个函数中调用它,该函数由点击触发:

function carousel_4way (n, el, m) {
        // remove outline from clicked element
        el.blur();

        // animate
        var carousel = '#carousel-4way-nav-' + n
        var carousel_content = '#carousel-4way-' + n
            transitionState  = (transitionState == '-') ? '+' : '-';

        **// I want the function to be placed inside, here**


        transitionState2 = '-';
        transitionState3 = '-';
        transitionState4 = '-';

    };

所以它就像一个非常重复的函数,需要在我的代码中多次使用。我该怎么做?


我使用Robert Koritnik的建议重写代码并且它正在工作:

function karuzela(n,el,m){  
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n

    function carousel_4way(){
        el.blur();
            transitionState  = (transitionState == '-') ? '+' : '-';
            $(carousel).transition({y: m + '=10', queue: false});
            };

    function carousel_animation(){

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });
            $('article div').promise().done(function(){
            $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
            $(carousel_reset).css({opacity:0});
            $(carousel_content)
            .css({opacity:100, duration:1500});
            });

            transitionState2 = '-';
            transitionState3 = '-';
            transitionState4 = '-';

    };
    carousel_4way()
    carousel_animation()
};

但是,现在我还没有办法将这两个嵌套的函数放在外面并自行使用它们:

function karuzela(n,el,m){
  var carousel = '#carousel-4way-nav-' + n
  var carousel_content = '#carousel-4way-' + n
    carousel_4way()
    carousel_animation()
};

2 个答案:

答案 0 :(得分:1)

您遇到的问题是可变范围

......以及他们在个人功能中的可见度。当您尝试调用函数时,可能会收到carousel和其他变量未定义的错误。

尝试更改您的功能以获得此签名:

function carousel_animation(carousel, carousel_content, carousel_reset, m)
{
    ...
}

或者因为你从其他变量生成那些选择器只是传递那些:

function carousel_animation(n, el, m)
{
    var carousel = '#carousel-4way-nav-' + n;
    var carousel_content = '#carousel-4way-' + n;
    ...
}

这可能不适用于我们不了解的同一功能的其他用途。但您必须了解变量范围。例如,carousel变量是carousel_4way函数的本地变量,因此其他函数(如果未在同一函数中定义)将无法看到它。因此,您必须:

  • 将两个函数放在私有函数作用域中并在作用域内定义这些变量,这样两个函数都会看到:
  • 将共享变量设为全局,这是不推荐的,因为这会打开一个完全不同的 can of worms ,因为您的变量值可能会发生意外情况

答案 1 :(得分:0)

只需调用它

// I want the function to be placed inside, here
carousel_animation()