JQuery'deki "hover" bağlantısını nasıl kaldırırım?
Bu çalışmıyor:
$(this).unbind('hover');
JQuery'deki "hover" bağlantısını nasıl kaldırırım?
Bu çalışmıyor:
$(this).unbind('hover');
Yanıtlar:
$(this).unbind('mouseenter').unbind('mouseleave')
veya daha kısaca (teşekkürler @Chad Grant ):
$(this).unbind('mouseenter mouseleave')
Aslında, jQuery dokümantasyonu yukarıda gösterilen zincirleme örneklerden daha basit bir yaklaşıma sahiptir (yine de gayet iyi çalışacaklardır):
$("#myElement").unbind('mouseenter mouseleave');
JQuery 1.7 itibariyle Eğer mümkün kullanımı da vardır $.on()ve $.off()olay, bağlayıcı böylece vurgulu olay bağlantı kesme bulunabilmesi için, daha basit ve daha düzenli kullanır:
$('#myElement').off('hover');
Sözde olay adı olan "hover" , "mouseenter mouseleave" için bir kısaltma olarak kullanılır, ancak önceki jQuery sürümlerinde farklı şekilde işlenirdi; gerçek olay adlarının her birini açıkça kaldırmanızı gerektiren. Kullanılması $.off()şimdi aynı steno kullanarak hem fare olaylarını düşmesine izin vermektedir.
2016'yı Düzenle:
Hala popüler bir soru, bu nedenle @ Dennis98'in aşağıdaki yorumlarda jQuery 1.9+ sürümünde "hover" olayının standart " mouseenter mouseleave " çağrıları lehine kullanımdan kaldırıldığına dikkat çekmeye değer . Yani olay bağlama beyanınız şimdi şöyle görünmelidir:
$('#myElement').off('mouseenter mouseleave');
$.off("hover")çalışmıyor. Ancak, her iki etkinliği de kullanmak harika çalışıyor.
$.off()hala orada, şu anda olayları çözmek için önerilen yöntem. Yani şu andan itibaren yazmanız gerekiyor $(element).off("mouseenter mouseleave");.
Ciltten Çıkar mouseenterve mouseleaveeleman (lar) üzerinde olaylar tek tek veya unbind tüm olaylar.
$(this).unbind('mouseenter').unbind('mouseleave');
veya
$(this).unbind(); // assuming you have no other handlers you want to keep
.Live () ile eklenen olaylar için başka bir çözüm .die () .
Ör .:
// attach click event for <a> tags
$('a').live('click', function(){});
// deattach click event from <a> tags
$('a').die('click');
Burada iyi bir referans bulabilirsiniz: jQuery .live () ve .die () 'yi keşfetme
(İngilizcem için özür dilerim: ">)
Tüm fareyle üzerine gelme, arka planda fareyle üzerine gelme ve fareyle çekme özelliğine bağlanır. İşlevlerinizi bu olaylardan ayrı ayrı bağlayıp çözerdim.
Örneğin, aşağıdaki html'ye sahip olduğunuzu varsayalım:
<a href="#" class="myLink">Link</a>
jQuery'niz şöyle olur:
$(document).ready(function() {
function mouseOver()
{
$(this).css('color', 'red');
}
function mouseOut()
{
$(this).css('color', 'blue');
}
// either of these might work
$('.myLink').hover(mouseOver, mouseOut);
$('.myLink').mouseover(mouseOver).mouseout(mouseOut);
// otherwise use this
$('.myLink').bind('mouseover', mouseOver).bind('mouseout', mouseOut);
// then to unbind
$('.myLink').click(function(e) {
e.preventDefault();
$('.myLink').unbind('mouseover', mouseOver).unbind('mouseout', mouseOut);
});
});
Sen tarafından bağlıydı belirli olay işleyicisi kaldırabilir onkullanarak,off
$("#ID").on ("eventName", additionalCss, handlerFunction);
// to remove the specific handler
$("#ID").off ("eventName", additionalCss, handlerFunction);
Bunu kullanarak, yalnızca handlerFunction'ı kaldıracaksınız.Başka
bir iyi uygulama, birden çok ekli olay için bir ad alanı ayarlamaktır.
$("#ID").on ("eventName1.nameSpace", additionalCss, handlerFunction1);
$("#ID").on ("eventName2.nameSpace", additionalCss, handlerFunction2);
// ...
$("#ID").on ("eventNameN.nameSpace", additionalCss, handlerFunctionN);
// and to remove handlerFunction from 1 to N, just use this
$("#ID").off(".nameSpace");
Bunun .hover () için ikinci argüman (işlev) olarak çalıştığını buldum
$('#yourId').hover(
function(){
// Your code goes here
},
function(){
$(this).unbind()
}
});
İlk işlev (.hover () argümanı) fareyle üzerine gelmedir ve kodunuzu çalıştıracaktır. İkinci argüman fareyle üzerine gelme olayı ile # kimliğiniz arasındaki bağlantıyı kaldıracak. Kodunuz yalnızca bir kez yürütülecektir.
$.unbind()gibi tek başına o nesnedeki tüm olayları kaldırmaz mı? Hangi durumda senin $.click()olayların gibi şeyler şimdi başarısız olur, değil mi?