2012-02-01 58 views
0

我想取消綁定在包含當這個按鈕被點擊我使用這段代碼 一個按鈕一個div的事件,但它似乎沒有工作,事件不斷附加到按鈕容器:jQuery的使用關()元素的最接近的容器上

$('body').on('click', '.button', function(){ 
     $('body').off('mouseleave',$(this).closest('.button-container')); 
}); 

我在做什麼錯了?

小提琴鏈接:http://jsfiddle.net/y3a6N/3/

感謝

+0

,什麼是你的'在()'看起來像?什麼是HTML的樣子?你可以發佈[JS小提琴演示](http://jsfiddle.net/)? – 2012-02-01 00:16:57

+0

我們必須看到您的HTML以瞭解如何提供幫助。 – jfriend00 2012-02-01 00:23:51

+0

更新小提琴鏈接:http://jsfiddle.net/y3a6N/3/ – Vincent 2012-02-01 00:40:21

回答

1

不能使用.on().off()的方式。你.on()代碼是一個委託處理程序:

$('body').on('hover', '.button-container', function(){ 
    $(this).append('<p>New text</p>'); 
}); 

這是附着在身體對象,並尋求從類「按鈕容器」的任何元素懸停事件的事件處理程序。

你不能再只是做.off()一個特定元素就像你想用這個做:

$('body').off('hover',$(this).closest('.button-container')); 

所以沒有匹配的事件處理程序來刪除不符合.on()簽名。有了委託事件處理程序(就像你在這裏使用.on()),它或者什麼都不是。您要麼刪除整個事件處理程序。你不能告訴它僅僅代表一些對象停止委託。這裏

function addText() { 
    $(this).append('<p>New text</p>'); 
} 

$('.button-container').on('hover', addText); 

$('.button').on('click', function(){ 
    $(this).closest('.button-container').off('hover', addText); 
}); 

工作的jsfiddle:

如果你的對象是不是動態的,因此你不需要委託事件處理,你可以做到這一點,除去要刪除特定的事件處理程序http://jsfiddle.net/jfriend00/R2eQx/


,可能是簡單的另一種方法是剛剛從像這樣的對象刪除類:

<div class="button-container active"> 
    <div class="button" style="border: 1px solid #cc0000">Roll over me to make text appear/Click me to stop making text appear (doesn't work)</div> 
</div> 

$('body').on('hover', '.active', function(){ 
    $(this).append('<p>New text</p>'); 
}); 

$('body').on('click', '.button', function(){ 
    $(this).closest(".button-container").removeClass("active"); 
}); 

和工作的jsfiddle這裏:http://jsfiddle.net/jfriend00/byFpx/

這使得在地方事件處理程序,而只是將刪除按鈕的容器觸發類,這樣就不會在事件處理程序相匹配了。通過再次添加類,可以更容易地再次觸發它。

+0

感謝您非常明確的答案 – Vincent 2012-02-01 00:53:50

+1

@Vincent - 我在回答結束,可能是更清潔添加另一種選擇。它只是從父級添加/刪除一個類。 – jfriend00 2012-02-01 01:04:08

+0

哇,你的回答真的超過我的期望,1000謝謝你,非常有幫助 – Vincent 2012-02-01 01:07:13

0

你關閉的用法是錯誤的。看你的舊代碼和你的描述,我覺得這是你想達到什麼目的:

var handler = function(){ 
     $(this).append('<p>New text</p>') } 
    $('body').on('hover', '.button-container', handler); 

    $('body').on('click', '.button', function(){ 

     $('body').off('hover', ".button-container", handler); 
    }); 

這將禁用您指定的懸停事件處理程序使用第一.on()