Funkcja, która ma kliknąć niezaznaczone checkbox-y

Funkcja, która ma kliknąć niezaznaczone checkbox-y
AM
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:32
0

Hej,

Mam prostą funkcję checkAll, która zaznacza wszystkie checkbox-y

Kopiuj
    $('#checkAll').click(function () {
        $(':checkbox.custom-control-input').prop('checked', this.checked);
    });

I ta sprawdza się doskonale przy listach gdzie występują same checkbox-y

Ale głowię się teraz nad kolejną, która musi w odróżnieniu od poprzedniej kliknąć w te niezaznaczone (jest to konieczne, żeby zadziałała inna funkcja szefa, która to działa tylko na onclick)

Na szybko wymyśliłem coś takiego:

Kopiuj
$('#checkAll').click(function () {
        $(':checkbox.custom-control-input').prop('checked', this.checked)
        $(':checkbox.custom-control-input').prop('click', this.click);
        $(':checkbox.custom-control-input').prop('click', this.click);
 });

i wstępnie działa ale "klika" w checkbox-y już zaznaczone. A to powoduje wyzerowanie wybranych wcześniej wartości w powiązanych (z checkbox-ami) listach rozwijanych ("form-control")

To zadanie to mój pierwszy kontakt z jQuery dlatego proszę o wyrozumiałość jeśli coś źle objaśniłem.
Czas na realizację mnie goni dlatego będę wdzięczny za pomysły co do rozwiązania tego problemu.

Pozdrawiam Adam

M3
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:195
1

Nie możesz po prostu ustawić wszystkie checkboxy jako zaznaczone zamiast na nie klikać?

Kopiuj
document.querySelectorAll('input[type=checkbox].custom-control-input').forEach((input) => input.checked = true);

Jeśli bardzo chcesz jQuery to

Kopiuj
$(':checkbox.custom-control-input]').each(function() { this.checked = true });
edytowany 1x, ostatnio: m31
AM
Niestety najważniejszym warunkiem jest klikanie w checkbox-y bo to aktywuje funkcje blokowania/odblokowania dalszych opcji.
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
5

Autorowi nie do końca o to chodziło. Spróbuj tak:

Kopiuj
<input type="checkbox" id="vehicle1" name="vehicle1" value="Bike" onclick="console.log('jeden');">
<input type="checkbox" id="vehicle2" name="vehicle2" value="Car" onclick="console.log('dwa');" checked>
<input type="checkbox" id="vehicle3" name="vehicle3" value="Boat" onclick="console.log('trzy');">
Kopiuj
document.querySelectorAll("INPUT[type='checkbox']:not(:checked)").forEach((input) => input.click());

AM
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:32
0

@Freja Draco: Ślicznie dziękuję za pomoc.

Docelowo chciałbym zrobić tak

Kopiuj
$('#checkAll').click(function () {
        if ($(this).prop("checked")) {
            document.querySelectorAll("INPUT[type='checkbox']:not(:checked)").forEach((input) => input.click());
        }
        else {
            document.querySelectorAll("INPUT[type='checkbox']:is(:checked)").forEach((input) => input.click());
        }
    });

Jednak nie do końca rozumie jak powinien działać ten fragment gdzie chciałbym wywołać odwrotny efekt.

Kopiuj

            document.querySelectorAll("INPUT[type='checkbox']:is(:checked)").forEach((input) => input.click());

Radosław Głębicki
Zastanawia mnie działanie click(). Czy to nie chodzi o to, że nieważne co mamy (w przypadku checkboxa) to nastąpi "klikniecie" i zmieni się stan na odwrotny? Może nie trzeba sprawdzać czy jest "checked"?
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
1
Kopiuj
document.querySelectorAll("INPUT[type='checkbox']:not(:checked)").forEach((input) => input.click());
document.querySelectorAll("INPUT[type='checkbox']:checked").forEach((input) => input.click());


AM
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:32
0

@Freja Draco: Jeszcze raz dziękuję ;)

Jesteś super :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.