używam CSS do zmiany stylu grupę radiową takiego:Dlaczego Jquery dodaje style śródtekstowe do mojego html?
To się robi ukrywając gniazdowania rzeczywiste wejście (przycisk) wewnątrz tagu etykietę, a następnie ustawienie samego wejścia do display:none
w CSS i stylizacji samą etykietę, aby stać przycisku, takie jak:
<label for="likert1" class="likert">
<input type="radio" id="likert1" name="patientViewGroup" value="1">
1
</label>
To można zrobić wszystko z CSS ... ale ponieważ niektóre przeglądarki (patrzę na ciebie, IE8 i poniżej) nie rozpoznaje pseudoklasie :checked
, robiąc to w ten sposób, że ludzie ur rzeczywiste wejście - co spowoduje przekazanie wartości z formularza - nie zawsze rejestruje, że jest sprawdzane, więc JQuery na ratunek.
Używam teraz JQuery do ustawienia addClass ".amClicked" po kliknięciu jednej z etykiet, w którym to czasie przełącza także "sprawdzony" atrybut radia na "true" i usuwa klasę "amChecked" z rodzeństwo. Łatwo, prawda? Oto, że kod jQuery:
$('.likert').on("click",function() {
console.log("clikcy!");
if(!$(this).hasClass('amChecked')) {
$(this).addClass("amChecked");
$(this).children(":radio").attr("checked",true).css("display","none");
}
$(this).siblings().removeClass("amChecked")
.children(":radio").css("display","none");
});
Dobrze byłoby, oprócz tego, że JQuery, z jakiegoś powodu, wydaje się piekło gięte na dodanie „styl” tag in-line do mojego <input>
że jest przesłanianie moich display: none;
i nie- ukrywanie sam przełącznik, jak # 3 poniżej:
i oto, co to kod wejściowy wygląda po kliknięciu:
<input type="radio" id="likert3" name="patientViewGroup" value="3"
checked="checked" style="display: inline-block; " class="amChecked">
Co gorsza, dodanie do mojego kodu kliknięcia .css("display","none")
(jak widać powyżej) nie zastępuje go - przycisk nadal pokazuje się. Gdybym nie dodawać go do linii removeClass, że przycisk pozostaje tylko tam zaznaczone, a więc:
SO - może ktoś mi powiedzieć, dlaczego jQuery jest dodanie tego nieproszony do mojego kodu, i czy jest coś, co mogę zrobić, aby to zatrzymać lub zmienić? Każda pomoc będzie bardzo ceniona!
Czy można utworzyć przykład jsFiddle? – j08691
Dodajesz '.amChecked' nie' .amClicked' – kidwon
Nie powinieneś używać 'display: none' dla ukrytych przycisków radiowych. Użyj 'position: absolute; left: -10000px; 'zamiast tego. IE nie będzie honorować zdarzeń "kliknięcia" na przyciskach radiowych lub polach wyboru, które są jawnie ukryte za pomocą 'display: none' lub' visibility: hidden'. – Pointy