jQuery unbind()on toggle,然后切换出bind()

时间:2011-12-06 22:23:49

标签: jquery toggle bind unbind

在我取消绑定之后,我无法重新绑定我的功能。

我想解开对所有siblings()的切换,这似乎有效......然后切换到将兄弟姐妹()重新绑定回原始状态。

这是我的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 个答案:

答案 0 :(得分:1)

你需要添加一个这样的点击处理程序:

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

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

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

答案 1 :(得分:1)

.bind()方法用于将事件处理程序直接附加到元素。

做的时候:

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

你绑定了click事件,但是没有处理程序(没有执行的函数)所以不会发生任何事情。

在脚本的某处,你可能有一个在click事件上执行的函数,如:

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

否则为什么你需要解开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()。

答案 2 :(得分:0)

@ user863739:这是你的代码

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

所以你将'click'绑定到......哼哼......到了什么? jQuery之神迫使你添加(至少)一个参数来指定'click'事件将被绑定的内容。它必须被指定为函数参考(如Billy Moon所说)。如果没有这个,就像试图在没有脖子的情况下束缚领带一样。