2013-07-02 14 views
5

Próbuję wykryć, kiedy mouseup (przycisk myszy zwolniony) występuje poza elementem, który wywołał zdarzenie mousedown. Mam kilka przycisków, które zmieniam CSS (przy użyciu klas) z mousedown (naciśnięcie przycisku) i zakończenie kliknięcia (mousedown + mouseup). Problem polega na tym, że po kliknięciu elementu zwolnij przycisk myszy poza elementem, że mouseup nie uruchamia się. Próbowałem również przechwycić ogólne zdarzenie "mouseup" na dokumencie, aby "zresetować" klasy przypisane do elementu i to też nie działa.Wykrywanie mouseup poza mousedown elementu

Oto próbka HTML:

<div class="qbuttons"> 
<a id="qb_appointments" href="#" class="appointments"><div> 
Schedule a Service<br /> 
Appointment</div></a> 
</div> 

Oto jQuery, że używam pobawić z elementem:

var current_qbutton = ""; 

$('.qbuttons a').mousedown(function() { 
    current_qbutton = $(this).attr('id'); 
    $(this).addClass('active'); 
}); 

$('.qbuttons a').click(function() { 
    $(this).removeClass('active'); 
}); 

$('*').mouseup(function(event) { 
    event.stopPropagation(); 
    alert(current_qbutton); 
    if(current_qbutton != "") { 
     $('#' + current_qbutton).removeClass('active'); 
     current_qbutton = ""; 
    } 
}); 

próbowałem różnych selektorów dla mouseUp - dokument , okno, "body *", "html " i "" - z tego, co widzę, wynika, że ​​mouseup nie uruchamia się po zwolnieniu przycisku myszy poza elementem mousedown, ponieważ alert się nie pojawia.

+0

Zorientowałeś się, że zdarzenia mousedown/mouseup nie działają w ten sposób, więc musisz wymyślić inny sposób robienia tego, co chcesz. Oto skrzypce do grania z -> http://jsfiddle.net/xQamz/ – adeneo

Odpowiedz

2

Powód, dla którego to nie działa, wynika z elementu anchor (który nie wydaje się służyć żadnemu celowi). Możesz usunąć a i zastąpić go div lub span lub innym podobnym elementem, a następnie zdarzenie mouseup może zostać wywołane poza elementem.

Wydaje się, że to działa dla mnie. http://jsfiddle.net/FXnsx/3/

var current_button; 
$('.test').on('mousedown', function(){ 
    current_button = this.id; 
}); 
$(document).on('mouseup', function(){ 
    alert(current_button); 
}); 
+0

Element kotwicy spodoba się rzeczywistemu adresowi URL. Kod ma po prostu symbol krzyżyka w tym miejscu jako symbol zastępczy. Zewnętrzne div.qbuttons zawiera jeden lub więcej elementów kotwicznych. –

+0

Okay @Joe teraz jest tutaj, gdzie jest jeszcze bardziej nieznajomy. Zmodyfikowałem twój kod JS Fiddle, aby bardziej przypominał moją strukturę, a twój kod nadal działa. Zmodyfikowałem swój kod tak, aby był bardziej zbliżony do twojego, a mój kod nadal nie działa. To ma być prosty efekt przycisku i używam jQuery, ponieważ program Internet Explorer nie implementuje poprawnie: aktywnej pseudoklasy w sposób, który pozwala mi ją uruchomić. Grr. Oto, co obecnie mam na miejscu: http://jsfiddle.net/hairydogdigital/R6bq3/10/ –

0

Jeśli dobrze zrozumiałem, można korzystać z tego typu połowu całą mouseUp dokument i sprawdź, czy wewnątrz, czy cel ten jest lub nie wtedy zdecydować, co chcesz.

$(document).mouseup(function (e) { 
var buttons = $("#btn1, #btn2"); 
if (!buttons.is(e.target) //clicking target is not the buttons 
{[desision 1] } 
else 
{ [desision 2] } 
}); 

Mam nadzieję, że ta pomoc.

Powiązane problemy