jQuery unbind () при переключении, затем отключить bind () - PullRequest
0 голосов
/ 07 декабря 2011

У меня возникли проблемы с повторным связыванием моей функции после того, как я ее развязал.

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

Вот мой JS

function filterme(id, name){
$(id).toggle(function(event) {
    event.preventDefault();

    $(this).parent().siblings().children().unbind('click');
    $(this).parent().siblings().css({opacity: '0.3'}, 800);

    elements = $('body').find(name);
    $(this).addClass('clicked');

    if(elements.length > 0) {
        if($(name+':visible')) {
            $('div.row:visible').fadeOut('200');
            $(name+':visible').parent().fadeIn('200');
        }
    }
}, function(event) {
        event.preventDefault();
        $('div.row').fadeIn('200');
        $(this).removeClass('clicked');
        $(this).parent().siblings().css({opacity: '1'}, 800);
        $(this).parent().siblings().children().bind('click');


});
}


filterme('a.under-pound', 'div.lowest-price');

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Метод .bind () используется для присоединения обработчика событий непосредственно к элементам.

При выполнении:

$(this).parent().siblings().children().bind('click');

Вы связываете событие click, но обработчик отсутствует(нет функции для выполнения), поэтому ничего особенного не произойдет.

Где-то в вашем скрипте у вас, вероятно, есть функция, которая выполняется при событии щелчка, что-то вроде:

$(this).parent().siblings().children().click(function() {
     alert('someone clicked me');
});

, иначе зачем вамдля начала необходимо отменить привязку события click, пытаясь избавиться от события click, а затем заново присоединить событие click, а просто вызвать .bind ('click');Я не буду этого делать, ему нужно будет снова установить всю функцию.

Обычно вы делаете это, создавая функцию, например так:

function whatToDoIfSomeoneClicks() {
     alert('someone clicked me');
}

Теперь вы можетесвяжите эту функцию с событием:

$(this).parent().siblings().children().bind('click', whatToDoIfSomeoneClicks);

Затем вы можете отменить привязку этой функции:

$(this).parent().siblings().children().unbind('click', whatToDoIfSomeoneClicks);

и повторно связать ту же функцию, чтобы вернуть ее снова:

$(this).parent().siblings().children().bind('click', whatToDoIfSomeoneClicks);

и начиная с jQuery 1.7 вы должны заменить bind () на on (), а unbind () на off ().

1 голос
/ 07 декабря 2011

вам нужно добавить обработчик кликов следующим образом:

function myClickHandler(e){
  // do something with event (e) here
}

...
.bind('click', myClickHandler);

...
.unbind('click', myClickHandler);
0 голосов
/ 07 декабря 2011

@ user863739: Это ваш код

$(this).parent().siblings().children().bind('click');

Таким образом, вы привязываете «щелчок» к… хм… к чему? Боги jQuery обязали вас добавить (как минимум) еще один параметр, чтобы указать, к какому событию 'click' будет привязано. Он должен быть указан как ссылка на функцию (как сказал Билли Мун). Без этого все равно что пытаться завязать галстук, не имея шеи.

...