Jak odznaczyć pole wyboru za pomocą biblioteki jQuery Uniform


144

Mam problem z odznaczeniem pliku checkbox. Spójrz na moje jsFiddle , gdzie próbuję:

   $("#check2").attr("checked", true);

Używam jednolite dla stylizacji checkboxi to po prostu nie działa, aby zaznaczyć / odznaczyćcheckbox .

Jakieś pomysły?


zarówno w Google Chrome, jak i Firefoxie nie działa dla mnie
— Upvote

Odpowiedzi:


108

Patrząc na swoje dokumenty, mają $.uniform.updatefunkcję odświeżania „umundurowanego” elementu.

Przykład: http://jsfiddle.net/r87NH/4/

$("input:checkbox").uniform();

$("body").on("click", "#check1", function () {
    var two = $("#check2").attr("checked", this.checked);
    $.uniform.update(two);
});

5
@mkoryak: Działa dobrze w programie 1.4.4, ale linki do plików js i css są uszkodzone. Oto zaktualizowane skrzypce. Jeśli masz na myśli, że będzie miał problemy w szczególności 1.6, to prawdopodobnie jest to prawda, ponieważ jQuery zmieniło, a następnie przywróciło zachowanie .attr(). Używając 1.6lub wyższej, naprawdę powinieneś używać .prop().
— user113716,

Nie widzę absolutnie żadnej różnicy między zaktualizowanym jsFiddle a oryginałem (aż do błędnego oznakowania pola wyboru 2), z wyjątkiem tego, że zaktualizowana wersja działa dla mnie, a oryginał nie!?!?
— iPadDeveloper2011,

Swoją drogą, wszystkie te jednolite formy rysowane pikselami wyglądają bardzo nieseksownie na siatkówce.
— wcielenie

nie działa dla mnie również jsfiddle nie działa lub jest mylące
— matthy

367

Prostszym rozwiązaniem jest zrobienie tego zamiast używania uniformu:

$('#check1').prop('checked', true); // will check the checkbox with id check1
$('#check1').prop('checked', false); // will uncheck the checkbox with id check1

Nie spowoduje to żadnej zdefiniowanej akcji kliknięcia.

Możesz także użyć:

$('#check1').click(); // 

Spowoduje to przełączenie zaznaczenia / odznaczenia pola wyboru, ale spowoduje to również uruchomienie dowolnej zdefiniowanej akcji kliknięcia. Więc uważaj.

EDYCJA : jQuery 1.6+ używa wartości zaznaczonych prop()nie attr()dla pól wyboru


2
To pozostawia zaznaczony atrybut bez zmian w jQuery 1.7.1. Działa, ale nie robi tego, co Twoim zdaniem powinno.
— 2rs2ts

24
$("#chkBox").attr('checked', false); 

To zadziałało dla mnie, spowoduje to odznaczenie pola wyboru. W ten sam sposób możemy użyć

$("#chkBox").attr('checked', true); 

aby zaznaczyć pole wyboru.


4
Myślę, że lepiej jest użyć funkcji .prop () zamiast .attr (). W przeciwnym razie nie zawsze będzie działać zgodnie z oczekiwaniami ...
— Simon Steinberger,

13

Jeśli używasz uniforma 1.5, użyj tej prostej sztuczki, aby dodać lub usunąć atrybut sprawdzenia.
Po prostu dodaj wartość = "sprawdź" w polu wejściowym pola wyboru.
Dodaj ten kod w uniform.js> function doCheckbox(elem){>.click(function(){

if ( $(elem+':checked').val() == 'check' ) {
    $(elem).attr('checked','checked');           
}
else {
    $(elem).removeAttr('checked');
}   

jeśli nie chcesz dodawać value = "check" w polu wprowadzania danych, ponieważ w niektórych przypadkach dodajesz dwa pola wyboru, więc użyj tego

if ($(elem).is(':checked')) {
 $(elem).attr('checked','checked');
}    
else
{    
 $(elem).removeAttr('checked');
}

Jeśli używasz uniformu 2.0, użyj tej prostej sztuczki, aby dodać lub usunąć atrybut sprawdzenia
w tej classUpdateChecked($tag, $el, options) {zmianie funkcji

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
}

Do

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
    if (isChecked) {
        $el.attr(c, c);
    } else {
        $el.removeAttr(c);
    }

}

7
$('#check1').prop('checked', true).uniform(); 
$('#check1').prop('checked', false).uniform(); 

To zadziałało dla mnie.


Dziękuję Ci bardzo. Mogę potwierdzić, że jest to najprostsze rozwiązanie.
— Rudolph Opperman

2

Po prostu zrób to:

$('#checkbox').prop('checked',true).uniform('refresh');

1

musisz zadzwonić, $.uniform.update()jeśli aktualizujesz element za pomocą javascript, jak wspomniano w dokumentacji.


1

Przede wszystkim checkedmoże mieć wartość checkedlub pusty ciąg.

$("input:checkbox").uniform();

$('#check1').live('click', function() {
    $('#check2').attr('checked', 'checked').uniform();
});

Nie ma nic złego w przekazywaniu wartości logicznej jako wartości checked.
— user113716

Ale nie piszemy znaczników HTML. Ustawiamy właściwość na HTMLInputElement. Zapraszamy do obejrzenia checkednieruchomości.
— user113716

Nieważne… Nie bardzo rozumiem, dlaczego jest nieważne…
— nyuszika7h

przekazywanie wartości logicznej jest obsługiwane tylko w wersji 1.6+, wcześniej trzeba było ustawić atrybut zaznaczony na „zaznaczony” lub go usunąć.
— mkoryak

1

W niektórych przypadkach możesz tego użyć:

$('.myInput').get(0).checked = true

Do przełączania możesz użyć if else z funkcją


1

 $("#checkall").change(function () {
            var checked = $(this).is(':checked');
            if (checked) {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", true).uniform();
                });
            } else {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", false).uniform();
                });
            }
        });

        // Changing state of CheckAll custom-checkbox
        $(".custom-checkbox").click(function () {
            if ($(".custom-checkbox").length == $(".custom-checkbox:checked").length) {
                $("#chk-all").prop("checked", true).uniform();
            } else {
                $("#chk-all").removeAttr("checked").uniform();
            }
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id='checkall' /> Select All<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="PHP"> PHP<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="AngularJS"> AngularJS<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Python"> Python<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Java"> Java<br/>


0

Innym sposobem jest:

posługiwać się $('#check2').click();

powoduje to, że uniform zaznacza pole wyboru i aktualizuje swoje maski


-1

pole wyboru, które działa jak radio btn

$(".checkgroup").live('change',function() { var previous=this.checked; $(".checkgroup).attr("checked", false); $(this).attr("checked", previous); });

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.