在回调中绑定/取消绑定

时间:2011-05-20 17:23:28

标签: jquery dynamic callback bind

我从垃圾浏览器中遇到各种各样的问题,我似乎无法用我读过的任何东西来克服这些问题。这是情况......我正在使用第三方插件来生成图库。此插件附带一个图片更改回调,每次更改图像时都会触发。

我要做的是为两个div添加css ...一个是包装div,当点击子div时它会滑出,当再次点击孩子时滑回来。

这是回调:

        changepicturecallback: function(){
                    $('.sxpp_commentsImage').unbind(toggle);
    oldWidth = $('.pp_pic_holder').width() - 20,
    newWidth = $('.pp_pic_holder').width() + (200),
    newHeight = $('.pp_hoverContainer').height(),
    cImageAlign = newWidth - 20;

                var toggle = function() {
                   if(newWidth == $('.sxpp_comments').width()){
                        $('.sxpp_comments').animate({width: oldWidth});
                            }else{
                        $('.sxpp_comments').animate({width: newWidth});
                    }
                }

            $('.sxpp_comments').width(oldWidth).css('background-color','red'); 
      $('.sxpp_commentsImage').css({'float':'right','background-color':'green','width':'20px','height':newHeight});     
            $('.sxpp_commentsImage').bind('click',toggle);      
  }

这在FF4& Chrome ...然而,好像在Internet Explorer中没有发生“绑定”。我一直在阅读“.live”& “.delegate”方法但是(A)我不熟悉它们是如何工作的(B)如果可以在变化上清除“.live”,那么在我使用绑定时将其添加回去。

我可能会忽略的任何见解或事情?

编辑*** ...单击链接时会动态创建div(显示灯箱)。所以我正在阅读...无论如何,绑定事件是错误的路线。

3 个答案:

答案 0 :(得分:3)

如果你想取消绑定事件功能,它的回调只需使用:

$('body').bind('click', function(evt){
    console.log('I will be written only once');
    $(this).unbind(evt);
})

答案 1 :(得分:1)

  • bind()用于页面加载时的元素。适合静电。
  • live()是动态生成元素的唯一解决方案。只有动态的选择。

您应取消绑定clicktoggle等事件,而不是实际的函数名称,这可能是您的问题。

答案 2 :(得分:1)

$('.sxpp_commentsImage').unbind("click", toggle);

而不是

$('.sxpp_commentsImage').unbind(toggle);

编辑:

或使用:

$('.sxpp_commentsImage').bind('click.myEvent', toggle);

然后

$('.sxpp_commentsImage').unbind('click.myEvent');

当您进行解绑时,不会声明切换。