JQuery ui-effects-wrapper, вызывающий хаос

Я использую jquery-ui, и в какой-то момент я использую шоу и скрываю функции довольно сильно, чтобы оживить меняющиеся изображения, входящие и выходящие.

По какой-то причине после нескольких попыток внезапно элементы управления на моей странице перестают отвечать на клики. После того, как я немного задумался, используя firebug, я обнаружил, что моя страница заполнена div класса оболочки ui-effects.

Я понятия не имею, почему это происходит или как остановить его. Если я удалю эти divs, я больше не могу видеть изображения, которые я анимация.

Любые идеи?

Ответ 1

ui-effects-wrapper был добавлен плагином jQuery UI.

Вот код, полученный из jquery.effects.core.js:

// Wraps the element around a wrapper that copies position properties
createWrapper: function(element) {

    // if the element is already wrapped, return it
    if (element.parent().is('.ui-effects-wrapper')) {
        return element.parent();
    }

    // wrap the element
    var props = {
            width: element.outerWidth(true),
            height: element.outerHeight(true),
            'float': element.css('float')
        },
        wrapper = $('<div></div>')
            .addClass('ui-effects-wrapper')
            .css({
                fontSize: '100%',
                background: 'transparent',
                border: 'none',
                margin: 0,
                padding: 0
            });

    element.wrap(wrapper);
    wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element

    // transfer positioning properties to the wrapper
    if (element.css('position') == 'static') {
        wrapper.css({ position: 'relative' });
        element.css({ position: 'relative' });
    } else {
        $.extend(props, {
            position: element.css('position'),
            zIndex: element.css('z-index')
        });
        $.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
            props[pos] = element.css(pos);
            if (isNaN(parseInt(props[pos], 10))) {
                props[pos] = 'auto';
            }
        });
        element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
    }

    return wrapper.css(props).show();
},

Ответ 2

В одной функции у меня был код, который переключил видимость двух кнопок и используемых эффектов, таких как fadeTo и отскок. Время от времени останется обертка. Я попытался добавить это к моему методу, идея состоит в том, что он удаляет обертки через 1,1 секунды после того, как эффекты были поставлены в очередь.

 setTimeout('$(".ui-effects-wrapper").children().unwrap();', 1100);

Это удаляет устаревшие обертки, но есть вероятность, что он также может удалить последующие обертки, которые используются для эффектов.

Мне было бы очень интересно увидеть какие-либо улучшения в этой технике.