Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Click wewnątrz click
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
rafik73
Witam

Mam taki kod:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){ //1
  2.  
  3. $(document).on("click",".wyk_edit_button",function () {
  4.  
  5. var id_wykladu1 = $(this).parent().parent().find(".wyk_edit_id").val();
  6. var nr1 = $(this).parent().parent().find(".wyk_edit_nr").val();
  7. var nazwa1 = $(this).parent().parent().find(".wyk_edit").val().trim();
  8. var original_nazwa = $(this).parent().parent().find(".wyk_edit").prop("defaultValue") ;
  9.  
  10. if(nazwa1 == "")
  11. {
  12. $(".cont").text("POLE 'TYTUŁ' NIE MOŻE BYĆ PUSTE !");
  13. if (!$(".popup:visible").length) {
  14. $(".popup").fadeIn(1);
  15. $(".popup").fadeOut(2200) ;
  16. $(this).parent().parent().find(".wyk_edit").val(original_nazwa) ;
  17. }
  18. }
  19. else
  20. {
  21.  
  22. $(".contask").text("NAPEWNO ZAPISAĆ ZMIANY ?");
  23. $(".closeaskyestext").text("TAK");
  24. $(".closeasknotext").text("NIE");
  25.  
  26. if (!$(".popupask:visible").length) {
  27. $(".popupask").fadeIn(1);
  28. $(document).on("click",".closeaskyes",function () {
  29.  
  30. alert(id_wykladu1 + " " + nr1 + " " + nazwa1) ; // ten alert się wyświetla
  31. $(".popupask").fadeOut() ;
  32. }); //click yes
  33.  
  34. $(document).on("click",".closeaskno",function () {
  35. $(".popupask").fadeOut(800) ;
  36. }); //click no
  37.  
  38.  
  39. }
  40. } //else
  41. }); //click
  42. }); //document
[JAVASCRIPT] pobierz, plaintext


Działa on tak, że po kliknięciu przycisku wyk_edit_button w tabeli
pojawia się okienko popupask z prośbą o potwierdzenie akcji.
Powiedzmy, że tabelka zawiera liczby od 1 do 10.
Problem polega na tym, że jeśli kliknę np: pozycję 1 i potwierdzę akcję
alert wyświetla wartości zmiennych id_wykladu1 , nr1 oraz nazwa1 .
Jeśli następnie kliknę np: 4 to alert wyświetli najpierw poprzednie wartości dla 1 a po kliknięciu ok w alercie
pojawia się następny i wyświetla zawartość 4. Wygląda to tak jakby skrypt pamiętał wybrane
wartości i wyświetlał je po kolei. Jak usunąć to zapamiętywanie?
Dziękuję z góry za zainteresowanie.
viking
Daj jakiś przykład działający na jsfiddle. Po co wszystko do document przypinasz?
rafik73
Z jsfiddle może być skomplikowana sprawa - dane w tabeli są wyciągane z mysql w pętli, ale się postaram jakąś symulację zrobić.
Zauważyłem, że nawet jak kliknę .closeaskno to skrypt zapamiętuje dane zmiennych.


Ok. Udało się wrzucić do jsfiddle:

https://jsfiddle.net/y34ux16z/2/

Kliknij w test pojawi się kwadracik obok pola tekstowego, kliknij go i potwierdź
w popupie. Powtórz kilka razy a zobaczysz niepożądany efekt.

Tzn. zagnieżdża się
trueblue
click na yes i no wcisnąłeś w obsługę click .wyk_edit_button.
rafik73
Do yes i no zmieniłem on na one i teraz działa.
https://jsfiddle.net/rafik73/y34ux16z/4/

Cytat(trueblue @ 4.08.2017, 08:51:11 ) *
click na yes i no wcisnąłeś w obsługę click .wyk_edit_button.


Musiałem ustawić jakąś sekwencje zdarzeń.
viking
Przy każdym kliknięciu w guzik po prawej tworzysz nowy listener dla tego okienka. Lepiej by było uporządkować ten kod.
rafik73
Cytat(viking @ 4.08.2017, 09:08:35 ) *
Przy każdym kliknięciu w guzik po prawej tworzysz nowy listener dla tego okienka. Lepiej by było uporządkować ten kod.


Można jakieś sugestie ?


Problem nie rozwiązany do końca. Działa tylko przy wyświetlaniu alert.
Docelowo zamiast alert jest kod wysyłający ajaxem wartości zmiennych.
I jak się pewnie domyślacie wysyła wszystkie zapamiętane sad.gif
viking
Znajdź najbliższego stałego rodzica dla każdego z tych klikalnych elementów, zamień za document. closeasyes i no przenieś poza ifa który zawiera pierwotnego klika. Jak chcesz przekazać coś dodatkowo możesz z tego zrobić funkcję albo po prostu gdzieś w kodzie zapisywać aktualnie kliknięty element i z niego wyciągać dane.
rafik73
Zmieniłem document

https://jsfiddle.net/rafik73/y34ux16z/5/

i tu dalej schody... sad.gif
viking
Nie widzę żadnych zmian.
rafik73
Wstawiłem zamiast document .wyk_content. Przy kliku yes i no został document,
ponieważ używam szablonu .popupask dla innych zdarzeń w kodzie i muszę mieć do niego dostęp w całym dokumencie.

https://jsfiddle.net/rafik73/y34ux16z/6/
viking
Ale kliki dalej zawarte są wewnątrz innych.
rafik73
no właśnie tu się małe schody zaczynają...
viking
https://jsfiddle.net/y34ux16z/7/

Zrobiłem to tylko dlatego w ten sposób żeby ci pokazać co można jeszcze robić. Tu wykorzystany jako pub/sub. Natomiast, skoro to okno wykorzystujesz wszędzie, to powinno być ładnie zapisane w nowym pliku, z jakąś sensowną logiką.
rafik73
Serdeczne dzięki. Przeanalizuję ten kod wnikliwie. JS jest u mnie w dużych powijakach, muszę sięgnąć do podstaw, bo braki u mnie wielkie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.