Простые обратные вызовы jQuery ломаются в IE - PullRequest
3 голосов
/ 02 марта 2010

У меня есть несколько таких функций:

$(this).find('.subnav').fadeIn(200, buttonHide );

Теперь buttonHide , в данном случае, это функция, которую я объявил в другом месте. После завершения 200 мс, я хочу вызвать эту функцию.

Отлично. Работает в FF и Safari. В IE, однако, он возвращает ошибку как неопределенную. Фактически, я столкнулся с ОДНОЙ и той же проблемой при использовании функции onAfter в scrollTo Ариэля Флезлера ... что дает?

Что мне нужно сделать, чтобы IE мог выполнять эти обратные вызовы?

РЕДАКТИРОВАТЬ: вот код, который включает в себя функцию. Эта страница называется ПОСЛЕ фрагмента выше ... Я немного новичок; это проблема? Ничего не запускается, пока ПОСЛЕ все не загружено.

jQuery(function( $ ){

    /* BEGIN MENU SCROLLER INITIALIZATION */

        // Resets pane
    $('.menuClip').scrollTo( 0 );

    // scrolls to active item to 
    $('body:not(.archive) .menuClip').stop().scrollTo( $('.current_page_item') );

    $('.menuDown').click(function(){
        $('.menuClip').stop().scrollTo( '+=70px', 800, {
            onAfter:function(){
                buttonHide();
            },
        });
    });
    $('.menuUp').click(function(){
        $('.menuClip').stop().scrollTo( '-=70px', 800, {
            onAfter:function(){
                buttonHide();
            },
        });
    });

/* END MENU SCROLLER INITIALIZATION */  

});

$(buttonHide = function() {
    setTimeout(function(){
        var elemM = $(document).find('.menuClip:visible');
        if (elemM[0].scrollHeight - elemM.scrollTop() == elemM.outerHeight()) {
            $('.menuDown').animate({"opacity":"0"}, 200);
        } else {
            $('.menuDown').animate({"opacity":"1"}, 200);
        }

        if (elemM.scrollTop() == 0) {
            $('.menuUp').animate({"opacity":"0"}, 200);
        } else {
            $('.menuUp').animate({"opacity":"1"}, 200);
        }
    }, 200);
});

1 Ответ

4 голосов
/ 03 марта 2010

Одна вещь, которую я заметил: запятая после обратного вызова прерывает IE:

$('#move_this_up').click(function(){
    $('#content').stop().scrollTo( '-=270', 1000,
        { onAfter:function(){
            inactiveContentStates();
        }, // COMMA BAD!!!!
    });
});

Помогло объявление функций перед вызовом и уничтожение запятых.

Надеюсь, это пригодится другим!

...