2011-05-20 99 views
1

我遇到了各种来自垃圾浏览器的问题,我似乎无法用我读过的任何东西克服这些问题。这是情况...我使用第三方插件来生成一个画廊。这个插件带有一个图片更改的回调,每次图片更改时都会触发。在回调中绑定/取消绑定

我想要做的是添加两个div的CSS ...一个是一个包装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(显示灯箱)。所以,我读的所有东西......绑定事件无论如何都是错误的路线。

回答

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

你应该解除绑定像clicktoggle,而不是实际的函数名的事件,这可能是你的问题。

+0

我同意它应该是活的()......然而,当图像被改变...这将导致live()堆叠在一起。有没有办法在添加下一个之前清除前一个live()? – Stuck 2011-05-20 17:44:50

+0

为什么会堆叠?你不可能有一个全球性的功能来照顾所有这些元素吗? – Blender 2011-05-20 17:46:01

+0

嗯......我没有想过将“var toggle =”从回调中移出来并使其成为全球...我的灵魂正在闪耀。所以我将它移出回调并添加了“$('。sxpp_commentsImage')。live('click',toggle);”然而,在IE中仍然具有相同的效果。 – Stuck 2011-05-20 17:55:51

1

尝试

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

,而不是

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

编辑:

或使用:

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

然后

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

作为切换不会在您执行解除绑定时声明。

2

如果你想解除绑定事件功能可按里面的回调只是使用:

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

这个解除绑定正在工作,但如果我想要在解除绑定后再次绑定此事件呢? – 2017-07-14 07:44:47

+1

然后使用函数, – VoVaVc 2017-12-25 16:13:26