JQuery'deki "hover" bağlantısını nasıl kaldırırım?


107

JQuery'deki "hover" bağlantısını nasıl kaldırırım?

Bu çalışmıyor:

$(this).unbind('hover');

2
Fareyle üzerine gelme etkinliğine atadığınız bir işlevi çözmeye mi yoksa bir <a> </a> fareyle üzerine gelmeyi değiştirmeye mi çalışıyorsunuz?
Justin Niessner

Justin Niessner'ın sorusunu netleştirmek için Javascript / DOM olaylarını veya CSS bildirimlerini kaldırmaya mı çalışıyorsunuz? İkincisi daha karmaşık bir konudur.
göz kapaksızlık

Yanıtlar:


214

$(this).unbind('mouseenter').unbind('mouseleave')

veya daha kısaca (teşekkürler @Chad Grant ):

$(this).unbind('mouseenter mouseleave')


42
veya $ (this) .unbind ('mouseenter mouseleave')
Chad Grant

fare girişi için gerekli sıra sonra fare çıktısından sonra mı?
sanghavi7

70

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');


4
JQuery 1.10.2'ye sahibim ve $.off("hover")çalışmıyor. Ancak, her iki etkinliği de kullanmak harika çalışıyor.
Alexis Wilke

Birden fazla filtreleme argümanı verildiğinde, kaldırılacak olay işleyicisinin sağladığı tüm argümanların eşleşmesi gerektiğini belirtmek gerekir. Ayrıca jQuery API belgelerinin .off () yönteminin .on () ile eklenmiş olay işleyicilerini kaldırdığını belirttiğine dikkat edin. Bunun YALNIZCA .on () kullanılarak eklenen etkinlikler için geçerli olduğu anlamına gelip gelmediği konusunda emin değilim. Ama olmamalı.
Phil.Wheeler

@AlexisWilke Evet, v1.9'da kaldırıldı, son bağlantıya bak ..;)
Dennis98

1
@ Dennis98 - JQuery hover hackinin deprecated.js'ye taşınmasından bahsediyorsun, değil mi? $ .off () olay bağlama jQuery'nin sonraki sürümlerinde hala mevcuttur.
Phil.Wheeler

Sağ. :) $.off()hala orada, şu anda olayları çözmek için önerilen yöntem. Yani şu andan itibaren yazmanız gerekiyor $(element).off("mouseenter mouseleave");.
Dennis98

10

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

4

unbind (), kodlanmış satır içi olaylarla çalışmaz.

Yani, örneğin, fareyle üzerine gelme olayının bağlantısını çözmek istiyorsanız <div id="some_div" onmouseover="do_something();">, bunu $('#some_div').attr('onmouseover','')başarmanın hızlı ve kirli bir yolu olduğunu gördüm .


4

.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: ">)


2

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);
  });

});

Düzeltme, jquery src hover baktıktan sonra aslında mouseenter / mouseleave'e bağlanıyor. Aynısını yapmalısın.
bendewey

2

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");

0

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.


1
Bunun $.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?
Alexis Wilke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.