Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][JavaScript]Sprawdzanie zaznaczonych checkboxów
trifek
post 16.06.2016, 15:11:11
Post #1





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

Ostrzeżenie: (0%)
-----


Witam serdecznie,
Mam taki kod HTML:
  1. OPCJE GŁÓWNE
  2. <input checked type="checkbox" value='2' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 1
  3. <input type="checkbox" value='8' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 2
  4. <input type="checkbox" value='9' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 3
  5. <input checked type="checkbox" value='10' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 4
  6. <input type="checkbox" value='3' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 5
  7. <input type="checkbox" value='11' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 6
  8. <input type="checkbox" value='12' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 7
  9. <input type="checkbox" value='13' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 8
  10. <input type="checkbox" value='14' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 9
  11. <input type="checkbox" value='15' name="zaznacz[]" class="zaznacz_sprawdz" /> opcja 10
  12.  
  13. OPCJE WYKLUCZONE
  14. <input checked type="checkbox" value='2' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 1
  15. <input type="checkbox" value='8' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 2
  16. <input type="checkbox" value='9' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 3
  17. <input checked type="checkbox" value='10' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 4
  18. <input type="checkbox" value='3' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 5
  19. <input type="checkbox" value='11' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 6
  20. <input type="checkbox" value='12' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 7
  21. <input type="checkbox" value='13' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 8
  22. <input type="checkbox" value='14' name="wymagaj[]" class="wymagaj_sprawdz" /> opcja 9
  23. <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
Go to the top of the page
+Quote Post
fate
post 16.06.2016, 15:25:51
Post #2





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


trzeba porównać value


--------------------
Go to the top of the page
+Quote Post
trifek
post 16.06.2016, 15:36:33
Post #3





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

Ostrzeżenie: (0%)
-----


tak, wiem... tylko nie wiem jak to zrobić sad.gif

Próbowałem czymś takim:
  1. $('.zaznacz_sprawdz').click(function() {
  2. if($(this).is(":checked")) // zaznaczony wymagaj_sprawdz
  3. {
  4. if($('.wymagaj_sprawdz').val() == $(this).val()){
  5. alert('Nie można wybrać tej opcji ponieważ została ona już wybrana WYMAGANYCH.')
  6. $(this).prop('checked', false);
  7. }
  8.  
  9. } else { // odznaczony
  10.  
  11. }
  12. });


ale nie działa to tak, jak powinno sad.gif
Go to the top of the page
+Quote Post
trueblue
post 16.06.2016, 15:48:46
Post #4





Grupa: Zarejestrowani
Postów: 6 762
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Musisz sprawdzić w drugiej grupie checkbox o tym samym indeksie, który jest klikany w pierwszej grupie.
Obecnie sprawdzasz zawsze pierwszy w drugiej grupie.


--------------------
Go to the top of the page
+Quote Post
trifek
post 16.06.2016, 16:09:15
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

Ostrzeżenie: (0%)
-----


  1. $('.zaznacz_sprawdz').click(function() {
  2. if($(this).is(":checked")) // zaznaczony wymagaj_sprawdz
  3. {
  4. var selected = [];
  5. $('.wymagaj_sprawdz').each(function() {
  6. if ($('.wymagaj_sprawdz').val() == $(this).val()) {
  7. selected.push($('.wymagaj_sprawdz').attr('val'));
  8. alert('Nie można wybrać tej opcji ponieważ została ona już wybrana WYMAGANYCH.');
  9. $(this).prop('checked', false);
  10. }
  11. });
  12. } else { // odznaczony
  13.  
  14. }
  15. });



Coś w tym stylu? Nie wiem dlaczego zawsze wyświetla mi wartość "2" w $(this).val() :/ bez względu co kliknę...
Go to the top of the page
+Quote Post
trueblue
post 16.06.2016, 16:13:44
Post #6





Grupa: Zarejestrowani
Postów: 6 762
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Teraz sprawdzasz każdy z drugiej grupy.

Jeśli sprawdzasz 2 w pierwszej grupie, to również 2 w drugiej grupie.
Możesz to zrobić korzystając z pętli each: http://api.jquery.com/jquery.each/

Albo jeszcze inaczej. Skoro każdy odpowiednik ma taki sam atrybut value, to klikając w pierwszej grupie input z value=5, sprawdzasz w drugiej grupie input z tym samym value.


--------------------
Go to the top of the page
+Quote Post
viking
post 16.06.2016, 16:17:07
Post #7





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


I mógłbyś tez za pomocą fieldset stworzyć logiczne grupy. Wtedy zbędne były by klasy na każdym elemencie.


--------------------
Go to the top of the page
+Quote Post
ZenekN
post 16.06.2016, 16:25:17
Post #8





Grupa: Zarejestrowani
Postów: 418
Pomógł: 5
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


https://jsfiddle.net/p2n4goq9/1/

1. Unikajmy bałaganu w HTML ;-)

@trueblue

Cytat
pętla each vs lokalizacja bezpośrednia


Ten post edytował ZenekN 16.06.2016, 16:27:57
Go to the top of the page
+Quote Post
trifek
post 16.06.2016, 16:59:15
Post #9





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

Ostrzeżenie: (0%)
-----


dziękuje, działa smile.gif
Go to the top of the page
+Quote Post
trueblue
post 16.06.2016, 17:40:36
Post #10





Grupa: Zarejestrowani
Postów: 6 762
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(ZenekN @ 16.06.2016, 17:25:17 ) *
@trueblue
Cytat

pętla each vs lokalizacja bezpośrednia


Nie bardzo wiem co miałeś na myśli.

Ale jeśli już dwie pętle, to może lepiej jedna.
https://jsfiddle.net/p2n4goq9/2/

A osobiście zrobiłbym tak:
https://jsfiddle.net/p2n4goq9/3/

Ten post edytował trueblue 16.06.2016, 17:40:51


--------------------
Go to the top of the page
+Quote Post
trifek
post 16.06.2016, 17:45:08
Post #11





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

Ostrzeżenie: (0%)
-----


Mam jeszcze pytanie smile.gif

Przerobiłem ten skrypt na taki:
  1. $('.zaznacz_sprawdz').click(function() {
  2. if($(this).is(":checked")) // zaznaczony wymagaj_sprawdz
  3. {
  4. aktualny = $(this).val();
  5. if($('.wymagaj_sprawdz[value="'+aktualny+'"]').is(':checked'))
  6. {
  7. alert('Ten rekord jest już wybrany w WYMAGANYCH');
  8. $(this).prop('checked', false);
  9. }
  10. else{
  11. aktualny = $(this).val();
  12. var randomp = Math.round(Math.random() * 99999) + Math.round(Math.random() * 100000);
  13. $.get("check_producy.php", {query2: randomp, query1: $(this).val(), query3: 1}, function(data1) {
  14. //$(".producent2").html(data1);
  15. var myArray = data1.split('|');
  16. if(myArray.length > 0 ){
  17. var r = confirm("Znalazłem powiązania w konfiguracji WYKLUCZEŃ. Czy nanieść konfigurację na planszę?");
  18. if (r == true) {
  19. for (var i = 0; i <= myArray.length + 1; i++) {
  20. if(myArray[i] !="" && myArray[i] !="undefined" && myArray[i] !="DODAJ" && myArray[i] !="USUN" && myArray[i] != null){
  21. $(".zaznacz_sprawdz:checkbox[value="+myArray[i]+"]").prop("checked","true");
  22. }
  23. }
  24. } else {
  25. alert('Operacja anulowana!');
  26. $('.zaznacz_sprawdz:checkbox[value="' + aktualny + '"]').attr('checked', false);
  27. }
  28. }
  29. });
  30. }
  31. }
  32. });


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 smile.gif

Ten post edytował trifek 16.06.2016, 18:19:23
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.05.2024 - 11:34