2015-11-04 4 views
-1

Я создал небольшой плагин jQuery, который создает липкие боковые панели, и я попытался создать метод «destroy», который удаляет липкость. Он отлично работает, но я использую его на нескольких элементах страницы (липкая боковая панель внутри аккордеонов), а когда я уничтожаю один, он удаляет события прокрутки для всех остальных.Отмена особых событий прокрутки в плагине jQuery

$parent.find('.js-opps-aside').stickAside(); 



    var thisScroll = $(window).on('scroll', enqStick); 

    ... 

    $(window).off('scroll', thisScroll); 

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

+0

Не могли бы вы дать некоторый контекст для трех строк кода? Когда они бегут? Что такое 'enqStick'? Что такое 'thisScroll'? Не уверен, что я следую. – Anders

+0

Ya, вам нужно предоставить MCVE, в вашем вопросе отсутствует контекст. Вы привязываете событие прокрутки к уровню окна, так как вы нацеливаете определенный прокрученный элемент? Нам нужно увидеть вашу логическую часть относительно этого. –

+0

Извините, я думал, что вышеуказанного кода было достаточно. И из ответов это казалось примерно так :) Спасибо. – evu

ответ

1

Когда вы используете $(). Off(), второй параметр является ссылкой на обработчик событий, и вы пытаетесь отключить его с помощью thisScroll, но это коллекция jQuery. Вы должны использовать это:

$(window).off('scroll', enqStick); 

Вы можете использовать другое решение, думаю, это лучше, просто suffit название события

$parent.find('.js-opps-aside').stickAside(); 

$(window).on('scroll.myCustomScroll', enqStick); 
... 
$(window).off('scroll.myCustomScroll'); 

$().off только с одним параметром будет от всех обратных вызовов событий, связанных с этим событием , в нашем случае это будет все scroll.myCustomScroll

+0

Это сделало, спасибо! – evu

1

Согласно логике укладки jQuery thisScroll является $ (окном). Что вы хотели бы сделать:

// Binding a handler 
$(window).on('scroll', enqStick); 

// removing handler by bound function handler 
$(window).off('scroll', enqStick);