2012-09-10 8 views
6

Zobacz ten jsfiddle:jQuery mouseup nie wypalanie po drag off linku

http://jsfiddle.net/CB87X/6/

kliknąć i przytrzymać przycisk, przeciągnij od przycisku i uwalniania. Jak widać, zdarzenie mouseup nigdy nie zostanie wywołane, jeśli mysz nie znajduje się nad elementem po zwolnieniu przycisku myszy. Tak więc stylizacja w moim przykładzie nigdy nie zmienia się z powrotem do oryginału. Jak wywołać zdarzenie mouseup, jeśli przycisk myszy zostanie zwolniony, gdy nie zostanie kliknięty element?

Edit1: BTW Przyjrzałem się kilku rozwiązaniom na tej stronie, zaimplementowałem je, a zdarzenie mouseup nie zostało uruchomione.

+2

Należy zauważyć, że jest to domyślne zachowanie zwykłych przycisków, przynajmniej w wersji chromowanej. [Demo] (http://jsfiddle.net/QxZCB/) –

+1

jak [w ten sposób] (http://jsfiddle.net/CB87X/7/) – Sender

Odpowiedz

9

Zdarzenie mouseup jest względne względem miejsca, w którym znajduje się wskaźnik i jest to oczekiwane zachowanie. Jeśli chcesz, aby przycisk poprawnie się ubarwił, połącz także wydarzenie mouseleave.

+0

Przez "równie dobrze" zakładam, że możesz powiązać dwa zdarzenia do jeden selektor? Jeśli tak, czy możesz mi pokazać, jak? Czy dodaję tylko osobną funkcję? – preahkumpii

+5

Dodaj wydarzenia rozdzielone przez "spację". '$ (". "ale"). bind ("mouseup mouseleave", function() {...} ' – alexbusu

+0

+1 za dostarczenie otwieracza puszek do tej puszki robaków * (konieczności zarządzania przyciskami myszy i myszką -własność, jeśli samo obniżenie efektu podczas trzymania przycisku nie jest wystarczające) * Dzięki, jednak. :-) – HostileFork

2

Rozwidlona swoją exemple do świadczenia pracy przykład:

http://jsfiddle.net/67Rrs/2/

Gdy przycisk jest mousedown ed, zdarzenie jest zobowiązany do następnego mouseup, gdzie to się dzieje, że resetuje styl.

2

To powinno wystarczyć. Jeśli klikniesz lewym przyciskiem myszy na przycisk (.but) i przeciągniesz, możesz w dowolnym miejscu na stronie mouseup i nadal uruchamiać zdarzenie kliknięcia. Jeśli masz mouseleave stronę "body" i mouseup, bind wyd mouseleave wydarzenie jest unbind wyd.

$('.but').mousedown(function(e) { 
    if (e.which == 1) { 
     var $this = $(this); 
     $this.bind('mouseleave', function(){ 
      $('body').one('mouseup', function() { 
       $this.click(); 
      }); 
     }); 
     $this.mouseup(function() { 
      $(this).unbind('mouseleave'); 
     }); 
    } 
}); 
Powiązane problemy