不能使用.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/。
這使得在地方事件處理程序,而只是將刪除按鈕的容器觸發類,這樣就不會在事件處理程序相匹配了。通過再次添加類,可以更容易地再次觸發它。
,什麼是你的'在()'看起來像?什麼是HTML的樣子?你可以發佈[JS小提琴演示](http://jsfiddle.net/)? – 2012-02-01 00:16:57
我們必須看到您的HTML以瞭解如何提供幫助。 – jfriend00 2012-02-01 00:23:51
更新小提琴鏈接:http://jsfiddle.net/y3a6N/3/ – Vincent 2012-02-01 00:40:21