Sprawdzanie zaznaczonych checkboxów w JQUERY

0

Witam serdecznie,
Mam taki kod HTML:

OPCJE GŁÓWNE
<input  checked  type="checkbox" value='2' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 1
<input  type="checkbox" value='8' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 2
<input  type="checkbox" value='9' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 3
<input  checked  type="checkbox" value='10' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 4
<input  type="checkbox" value='3' name="zaznacz[]" class="zaznacz_sprawdz" />   opcja 5
<input  type="checkbox" value='11' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 6
<input  type="checkbox" value='12' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 7
<input  type="checkbox" value='13' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 8
<input  type="checkbox" value='14' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 9
<input  type="checkbox" value='15' name="zaznacz[]" class="zaznacz_sprawdz" />  opcja 10

OPCJE WYKLUCZONE
<input  checked  type="checkbox" value='2' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 1
<input  type="checkbox" value='8' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 2
<input  type="checkbox" value='9' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 3
<input  checked  type="checkbox" value='10' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 4
<input  type="checkbox" value='3' name="wymagaj[]" class="wymagaj_sprawdz" />   opcja 5
<input  type="checkbox" value='11' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 6
<input  type="checkbox" value='12' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 7
<input  type="checkbox" value='13' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 8
<input  type="checkbox" value='14' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 9
<input  type="checkbox" value='15' name="wymagaj[]" class="wymagaj_sprawdz" />  opcja 10

Potrzebuję funkcję w JQUERY która będzie sprawdzała czy po kliknięciu jakiegokolwiek checkboxa z opcji głównych i wykluczonych nie są zduplikowane (wybrane podwójnie).
Czyli np. w momencie gdy zaznaczę pierwszego checkboxa w opcjach głównych - to po zaznaczeniu pierwszego checkboxa z opcji wykluczonych wyskoczy alert z komunikatem błędu i odznaczy zduplikowany checkbox (ostatnio kliknięty).

Użytkownik wybiera zarówno opcje główne jak i wykluczone - tylko jedną, nie może być duplikatów (opcji zaznaczonych w obu wariantach)

Wie ktoś może jak to zrobić?

Bardzo proszę o pomoc

0

Przy zdarzeniu onChange sprawdzaj czy zaznaczony input jest juz zaznaczony w drugiej sekcji. Jeśli tak - to rób podmianę. Poza tym jak zwykle napiszę - stosuj angielskie nazewnictwa.

0

tak, wiem... tylko nie wiem jak to zrobić :(

Próbowałem czymś takim:

$('.zaznacz_sprawdz').click(function() { 
$('.zaznacz_sprawdz').click(function() { 
    if($(this).is(":checked")) // zaznaczony wymagaj_sprawdz
    { 
        var selected = [];
        $('.wymagaj_sprawdz').each(function() {
           if ($('.wymagaj_sprawdz').val() == $(this).val()) { 
               selected.push($('.wymagaj_sprawdz').attr('val'));
               alert('Nie można wybrać tej opcji ponieważ została ona już wybrana WYMAGANYCH.');
               $(this).prop('checked', false);
           }
        }); 
    } else { // odznaczony
        
    }
});  

ale nie działa to tak, jak powinno :(

0

A nie mozesz po prostu radio buttona zamiast tego zrobic? 10 wierszy z 3 opcjami do wybory wymagany/wykluczony/nieinteresujemnie(default?)

0

właśnie muszą być te checkboxy :(

0

Inaczej powinienes sprawdzac wartosc, cos w tym stulu:

$('.wymagaj_sprawdz').each(function(index, value) {
           if (value === $(this).val()) { 
              
           }

Sprawdz jak powinna wygladac sygnatura metody przekazanej do each

0

https://jsfiddle.net/nfhc9fwu/

$("input").on("click", function() {
    var e = ["zaznacz_sprawdz", "wymagaj_sprawdz"][+ ($(this).prop("name") == "zaznacz[]")];
    if($(this).prop("checked")) {    	
        var s = `input[class=${e}][value=${$(this).val()}]`;
    	if($(s).prop("checked")) {
      	alert('Nie można wybrać tej opcji ponieważ została ona już wybrana WYMAGANYCH.');
      	$(this).prop("checked", false);
      }
    }
});
0

Dziękuję za pomoc :)
Mam jeszcze pytanie :)

Zadziałało takie coś:

$('.zaznacz_sprawdz').click(function() { 
        if($(this).is(":checked")) // zaznaczony wymagaj_sprawdz
        { 
            aktualny = $(this).val();
        if($('.wymagaj_sprawdz[value="'+aktualny+'"]').is(':checked'))
        {
            alert('Ten rekord jest już wybrany w WYMAGANYCH');
            $(this).prop('checked', false);
        }
        else{
            aktualny = $(this).val();
            var randomp = Math.round(Math.random() * 99999) + Math.round(Math.random() * 100000);           
            $.get("check_producy.php", {query2: randomp, query1: $(this).val(), query3: 1}, function(data1) {         
                //$(".producent2").html(data1); 
                var myArray = data1.split('|');
                if(myArray.length > 0 ){
                    var r = confirm("Znalazłem powiązania w konfiguracji WYKLUCZEŃ. Czy nanieść konfigurację na planszę?");
                    if (r == true) {
                        for (var i = 0; i <= myArray.length + 1; i++) {
                            if(myArray[i] !="" && myArray[i] !="undefined"  && myArray[i] !="DODAJ"  && myArray[i] !="USUN"  && myArray[i] != null){
                                $(".zaznacz_sprawdz:checkbox[value="+myArray[i]+"]").prop("checked","true");
                            }
                        }
                    } else {
                        alert('Operacja anulowana!');
                        $('.zaznacz_sprawdz:checkbox[value="' + aktualny + '"]').attr('checked', false);
                    }
                }
            });
        }
        }
    }); 

Z pliku PHP dostaję odpowiedź w formie: DODAJ|2|8|9|10|| lub brak jakiegokolwiek tekstu.

Chciałbym żeby skrypt wyświetlił jeszcze dodatkowo alerta z pytaniem (w momencie gdy z PHP pobierze informację DODAJ): "Wykryto powiązania w bazie danych. Nanieść je na listę? TAK / NIE - po kliknięciu na TAK
odznaczy na stronie w checkboxach wszystkie te, które mają wartość: 2, 8, 9, 10 i należą do klasy zaznacz_sprawdz).

Chodzi o to żeby skrypt sprawdzał prócz obecnie widocznych powiązań jeszcze te z bazy danych :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1