2011-05-20 101 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