2012-07-20 11 views
9

Z twitterami Bootstrap Stworzyłem grupę przycisków z zachowaniem typu radiobox, aby umożliwić użytkownikowi wybór pomiędzy różnymi stanami. To działa po wyjęciu z pudełka, jak przypuszczano.Twitter Bootstrap: Usuń/Przełącz aktywny stan grupy przycisków podobnych do checkboxów

Umówiłem się z jsFiddle przykład tutaj: http://jsfiddle.net/jpxWj/

co starałem (i ma) jest wciśnięty, że państwo może być usunięty po kliknięciu przycisku aktywnego raz drugi.

Próbowałem z jQuerys removeClass(), aby usunąć klasę active z klas btn, ale nie będzie działać. (próbowałem również usunięcie z .on() ale to po prostu utrzymuje aktywny zawsze ukryte/usunięte)

Odpowiedz

17

Here you go, zupełnie nieznane zjawisko wydarzenie, moim zdaniem. Możesz przeczytać więcej na ten temat here.

Edit:

Aby ellaborate, powód prosty .removeClass nie działa, dlatego istnieje wiele słuchacze, słuchając tego samego zdarzenia. Kiedy więc zostanie wywołane zdarzenie click, normalny .removeClass usunie klasę, ale wtedy program obsługi Bootstrap Twitter doda ją ponownie! Aby uniemożliwić wykonanie innych procedur obsługi po Twojej, możesz wykonać e.stopPropagation. Nie zatrzyma to jednak uchwytów dołączonych do tego samego elementu, co twój, tylko zatrzymuje je dalej w górę drzewa. Aby całkowicie upewnić się, że żadne inne procedury obsługi nie zostaną wykonane po twoim, możesz użyć event.stopImmediatePropagation().

+0

To jest po prostu super - bardzo dziękuję! Próbowałem z 'event.preventDefault()' ale to nie działało. 'event.stopImmediatePropagation()' działa zgodnie z oczekiwaniami. Zaktualizowałem jsFiddle, aby nieco zawęzić zakres: http://jsfiddle.net/jpxWj/2/ Jeszcze raz dziękuję za podpowiedź i pomoc! –

+0

Nie ma problemu, dodałem trochę wyjaśnień, uważam, że może to pomóc. –

+0

Doskonała odpowiedź, dzięki. – kliron

0

Bootstrap 3 Aktualizacja:

$('body').on('click', '.btn-group .btn.active',function(e){ 
     e.preventDefault(); 
     e.stopImmediatePropagation(); 
     $(this).find('input').removeAttr('checked'); 
     $(this).removeClass('active'); 
    }); 
+0

Dodanie 'e.stopImmediatePropagation();' działało dla mnie. – ryentzer

Powiązane problemy