2011-12-06 42 views
0

我有麻煩重新綁定我的功能後,我已經解除綁定它。jQuery unbind()在切換,然後撥出bind()

我想解除綁定到所有兄弟姐妹(),這似乎工作...然後在切換關閉重新綁定兄弟姐妹()回到他們的原始狀態。

這裏是我的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'); 
+0

你可以綁定點擊,或者技術上你可以,但它應該有一個功能,如果你期望它做什麼。如果使用jQuery 1.7+,你應該仔細看看on()/ off()函數。 – adeneo

+0

謝謝我會研究開/關功能 你是什麼意思'它應該有一個功能去用它? ' – user863739

回答

1

你需要添加一個單擊處理程序是這樣的:

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

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

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

對不起,我有點困惑 – user863739

0

@ user863739:這是你的代碼

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

所以你綁定「點擊'... ....呃....到什麼? jQuery神迫使你添加(至少)一個參數來指定'click'事件將被綁定的內容。它必須被指定爲函數參考(如Billy Moon所說)。如果沒有這個,就好像試圖綁定領帶而沒有脖子。

+0

我已經嘗試添加第二個參數,但仍然沒有運氣。 – user863739

+0

向我們顯示您的新密碼,請 – devnull69

+0

。unbind('click',filterme); .bind('click',filterme); VAR filterme =功能(ID,姓名){// 東西 } – user863739

1

.bind()方法用於將事件處理程序直接附加到元素。

做當:

$(this).parent().siblings().children().bind('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開始,您應該用on()替換bind(),並用off()取消綁定()。

+0

*,從jQuery 1.7開始,你應該用on()替換bind(),並用off()取消綁定()* 這是不正確的。如果您正在使用委託()和/或live(),則只應切換到on()或off()。 click()和bind()尚未被棄用(還):-) – devnull69

+1

[jQuery states](http://api.jquery.com/bind/):「從jQuery 1.7開始,.on()方法是將事件處理程序附加到文檔的首選方法。對於早期版本,使用.bind()方法將事件處理程序直接附加到元素。「 – adeneo

+0

oh bull * cks你是對的...每天學習新東西很好 – devnull69