Kod HTML wygląda tak:
<http://december.com/html/4/element/label.html> kliknij tu <http://december.com/html/4/element/input.html name="a" value="1" autocomplete="off" type="checkbox"> </http://december.com/html/4/element/label.html>
$(function() { $('label').on('click', function() { alert('click'); }); });
$('label input').on('click', function(e) { e.stopPropagation(); }); $('label').on('click', function() { alert('click'); });
Próbowałem tak, ale wtedy domyślnie nie zaznacza mi checkboxa. Zapewne dałoby się to obejść przez $(this).find('input').prop('checked', true); tylko wtedy sens wrapowania tego labelem zniknąłby.
Edited: Powyższe dotyczyło kodu sprzed Twojej edycji.
Co do celowości. Odziedziczyłem kod, w którym label ma jeszcze 2 potomków i są to elementy <img>, a input jest ukryty. Jest to więc forma checkboxa zastąpionego obrazkami. Kliknięcie na label miało zaznaczać checkboxa, by następnie wysłany formularz zawierał odpowiednie elementy. Dodatkowo onClick, miał powodować dodatkowe zaznaczanie i odnzaczanie innych elementów.
Tyle, że własnie pisząc Ci odpowiedź, uświadomiłem sobie, że to zostało zrobione bezsensu. Zdarzenie, które teraz jest przypięte do onclick, powinno zostać zmienione do onChange inputa i wszystko powinno działać poprawnie.
Bardzo możliwe, że można to osiągnąć poprzez tzw. checkbox hack, dlatego pytałem.
https://css-tricks.com/almanac/selectors/c/checked/
Myślałem o tym i jeśli chodzi o sam fakt zmiany obrazka, tak byłoby najlepiej, gdyby to było zrobione. Aczkolwiek wykonywane są jeszcze dodatkowe sprawdzenia w samym JS, więc i tak się nie obejdzie bez dodatkowego kodu. Przerzucenie zdarzenia na change inputa załatwiło sprawę. W każdym razie dzięki za pomoc, bo sobie uświadomiłem w czym leży problem.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)