2011-02-27 16 views
38

Şu anda sahip olduğum bir problemin çözümünü araştırdığımda, şu konuyu buldum: jQuery: more than one handler for same event. Şimdi bu işleyicilerin sadece bir tane kaldırmak mümkün olup olmadığını merak ediyorum?Belirli bir olay işleyicisini birden çok işleyici içeren bir olaydan kaldırmak mümkün mü?

+0

Aynı etkinlik veya farklı etkinlikler için? –

+0

Bu kolayca yapılamaz. Bir hack yapmalısın, jQuery bunun için tasarlanmamıştı. bunun yerine etkinlik adlarını kullanın. – Raynos

+0

Bence olay işleyicisini bir değişkende saklarsanız, onu değişkendiğiniz şekilde değiştirebilirsin, ama değişkeni test etmemiştim. –

cevap

65

değil kullanımı anonim geri aramalar yapmak eğer mümkündür: da

var $elt = $(...); 

function clickHandler1(event){...} 
function clickHandler2(event){...} 

// bind both 
$elt.click(clickHandler1); 
$elt.click(clickHandler2); 

// unbind just the first 
$elt.unbind('click', clickHandler1); 

A wild Demo appeared!

bakınız: .unbind() docs.

+13

Vahşi Demo çıktı! : -D – maryisdead

45

Aslında olay için ad aracılığıyla anonim geri aramalar kullanarak bunu yapabilirsiniz:

$elt.bind('click.handler1', function(event) { 
    alert('click handler 1'); 
}); 

$elt.unbind('click.handler1'); 

modifiye demo here bakınız. Daha fazla bilgi için

Ve here.

Bu, sorulan sorudan 4 ay önce çıkmış olan jQuery 1.4.3 numaralı telefona eklenmiştir.

+0

Parametreleri fonksiyonda iletebilir miyiz? –

+0

Anonim geri bildirimi kullanırken bu gerçekten iyi bir yanıttır. Bunu seviyorum. –

+1

Bu, çoğu çağrı/çağrı üzerine anonim bir işleve sahip olacağı için kabul edilen yanıt olmalıdır. – Omeed

İlgili konular