如何在Jquery中调用动画完整函数内的外部函数

时间:2014-08-08 11:49:18

标签: javascript jquery html

我的一个网站上有以下代码。我有一个名为" pressedTab(tab)"的声明函数。

当我尝试在以下动画完整功能中调用它时,$('#firstShow').animate({'margin-left':'-='+go+'px'}, 1000, 'linear',function() {...pressedTab(tab);}它无效。

我知道它的范围,但有人可以帮我修复代码吗?奇怪的是,这段代码多年来一直有效。去年它没有正常运作。

<script type="text/javascript">
$(document).ready(function () {

    $('.tab1').click(function () {
        name('tab1');
    });
    $('.tab2').click(function () {
        name('tab2');
    });
    $('.tab3').click(function () {
        name('tab3');
    });

    function name(tab) {
        function pressedTab(tab) { //FUNCTION THAT I NEED HELP WITH
            if (tab == 'tab1') {

                $('#img-2 #folder-tab-3').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('#folder-tab-1').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexUp');
                $('#folder-tab-2').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('.tab1 p').removeClass('current').addClass('current');
                $('.tab2 p').removeClass('current');
                $('.tab3 p').removeClass('current');

                $('#tug').hide('fast');
                $('#tugImages').hide('fast');
                $('#vessels').show();
                $('#vessels2').hide(0);
            } else if (tab == 'tab2') {

                $('#img-2 #folder-tab-3').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('#folder-tab-1').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('#folder-tab-2').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexUp');
                $('.tab1 p').removeClass('current');
                $('.tab2 p').removeClass('current').addClass('current');
                $('.tab3 p').removeClass('current');

                $('#tug').hide('fast');
                $('#tugImages').hide('fast');
                $('#vessels').hide(0);
                $('#vessels2').show();

            } else {

                $('#img-2 #folder-tab-3').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexUp');
                $('#folder-tab-1').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('#folder-tab-2').removeClass('zindexUp').removeClass('zindexDown').addClass('zindexDown');
                $('.tab1 p').removeClass('current');
                $('.tab2 p').removeClass('current');
                $('.tab3 p').removeClass('current').addClass('current');

                $('#tug').show();
                $('#tugImages').show();
                $('#vessels').hide(0);
                $('#vessels2').hide(0);
            }
        }

        if ($('#firstShow').attr('time') == "0") {
            var go = "250";
            $('#firstShow').animate({
                'margin-left': '-=' + go + 'px'
            }, 1000, 'linear', function () {

                $(this).attr('time', "1");
                $('.tab1').attr('time', "1");
                $('.tab2').attr('time', "1");
                $('.tab3').attr('time', "1");
                //Show the right folder
                $('#folder-tab-1').show("fast");
                $('#folder-tab-2').show("fast");
                $('#img-2 > #folder-tab-3').show("fast");
                //Hide the Upper of the folder
                $('#img-1').hide("fast");
                $('#firstShow #folder-tab-3').hide("fast");
                //alert(tab);
                pressedTab(tab); //FUNCTION WHERE I WOULD LIKE TO BE CALLED BUT IT'S NOT
            });

        } else {
            pressedTab(tab);
        }
    }
});
</script>

1 个答案:

答案 0 :(得分:1)

animate(...)中的回调函数将在name(tab)之后的上下文中调用,该函数无法访问name(tab)函数的范围,但可以访问全局范围。尝试将pressedTab(tab)放在$(document).ready(...)之外,它应该有效。