Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> JS zmiana div góra/dół
topcio
post 27.12.2022, 07:28:33
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Witajcie

Proszę o pomoc, możecie mi powiedzieć co mam nie tak w poniższym kodzie.

Przy każdym divie pokazują się strzałki.
Jak kliknę raz, przeskakuje div w dół, jak kliknę drugi raz tak jakby skrypt leciał dwa razy.... i tak potem 3,4,5,6,

  1. $(document).ready(function(){
  2. var petID='';
  3. var itemlist = $('#familiar_items');
  4. var len=$(itemlist).children().length;
  5. $("#familiar_items div").click(function(){
  6. selected= $(this).index();
  7. petID= $(this).attr("id");
  8. $("#familiar_items div").css('border-color', 'lightskyblue');
  9. $(this).css('border-color', 'lightgreen');
  10. console.log($(this).index());
  11.  
  12. $("#up_" + petID).click(function(e){
  13. e.preventDefault();
  14. if(selected > 0){
  15. jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
  16. // selected=selected-1;
  17. selected= $("#familiar_items").index();
  18. console.log(itemlist.children());
  19. }
  20. e.preventDefault();
  21. });
  22. $("#down_" + petID).click(function(e){
  23. e.preventDefault();
  24. if(selected < len) {
  25. jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
  26. // selected=selected+1;
  27. selected= $("#familiar_items").index();
  28. console.log(itemlist.children());
  29. }
  30. });
  31. });
  32. });


Po stronie PHP kod wygląda tak

  1. foreach ($acc_settings_file_json->$familiarData as $item) {
  2. if ($item->petUnlocked == true) {
  3. $pet_Id = $item->petId;
  4. echo "<div class=\"familiars\" id=\"" . $pet_Id . "\">";
  5. echo "<div class=\"familiarsdiv2\">";
  6. // obrazek
  7. echo "</div>";
  8. echo "<div class=\"familiarsdiv3\">";
  9. echo "<a id=\"up_" . $pet_Id . "\"><i class=\"fas fa-arrow-up\" style=\"color:darkgreen\"></i></a><br>";
  10. echo "<a id=\"down_" . $pet_Id . "\"><i class=\"fas fa-arrow-down\" style=\"color:darkgreen\"></i></a>";
  11. echo "</div>";
  12. echo "<div class=\"familiarsdiv4\">";
  13.  
  14. // echo $pet_Id;
  15. echo $familiars[$pet_Id];
  16. // echo $familiars_data, " - ", $familiars;
  17. echo "</div>";
  18. echo "</div>";
  19. }
  20. }

Go to the top of the page
+Quote Post
trueblue
post 27.12.2022, 09:39:00
Post #2





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

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


Atrybut id elementu ma wartość unikalną - nie może być kilka elementów z tym samym id.


--------------------
Go to the top of the page
+Quote Post
topcio
post 27.12.2022, 11:49:36
Post #3





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


no ma unikalną.
  1. id=\"down_" . $pet_Id . "\
Go to the top of the page
+Quote Post
viking
post 27.12.2022, 11:58:55
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Za każdym razem gdy klikasz, przypinasz nowe zdarzenie. Zastosuj nasłuchiwanie na rodzicu.
https://prophp.pl/article/28/propagacja_i_d...en_w_javascript


--------------------
Go to the top of the page
+Quote Post
topcio
post 27.12.2022, 16:41:51
Post #5





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


jest na rodzicu
w kodzie php nie wkleiłem początku

  1. if ($value_of_setting_right == "Pet") {
  2. echo "<li>";
  3. echo $value_of_setting_right, ": &nbspAktualnie Wybrany: &nbsp&nbsp";
  4. echo "<a href=\"#\" id=\"\"><i class=\"fas fa-arrow-up\" style=\"color:darkgreen\"></i></a>&nbsp&nbsp";
  5. echo "<a href=\"#\" id=\"\"><i class=\"fas fa-arrow-down\" style=\"color:darkgreen\"></i></a>";
  6. echo "<div id=\"familiar_items\">";
  7. $familiarData = 'familiarData';
  8. $petUnlocked = 'petUnlocked';
  9. foreach ($acc_settings_file_json->$familiarData as $item) {
  10. if ($item->petUnlocked == true) {
  11. $pet_Id = $item->petId;
  12. echo "<div class=\"familiars\" id=\"" . $pet_Id . "\">";
  13. echo "<div class=\"familiarsdiv2\">";
  14. // obrazek
  15. echo "</div>";
  16. echo "<div class=\"familiarsdiv3\">";
  17. echo "<a id=\"up_" . $pet_Id . "\"><i class=\"fas fa-arrow-up\" style=\"color:darkgreen\"></i></a><br>";
  18. echo "<a id=\"down_" . $pet_Id . "\"><i class=\"fas fa-arrow-down\" style=\"color:darkgreen\"></i></a>";
  19. echo "</div>";
  20. echo "<div class=\"familiarsdiv4\">";
  21.  
  22. // echo $pet_Id;
  23. echo $familiars[$pet_Id];
  24. // echo $familiars_data, " - ", $familiars;
  25. echo "</div>";
  26. echo "</div>";
  27. }
  28. }
  29. echo "</div>";
  30. echo "</li>";
  31. echo "</li>";
  32. }


czyli JS słucha tego

  1. echo "<div id=\"familiar_items\">";



chyba że coś źle myślę
Go to the top of the page
+Quote Post
viking
post 27.12.2022, 16:48:19
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Źle myślisz. Jaka to jest wersja jquery?


--------------------
Go to the top of the page
+Quote Post
topcio
post 27.12.2022, 22:31:07
Post #7





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


2.1.3

poprawiłem trochę kod JS
niby przeskakuje góra dół
  1. $(document).ready(function(){
  2. var selected = null;
  3. var petID='';
  4. var itemlist = $('#familiar_items');
  5. var len=$(itemlist).children().length;
  6. $("#familiar_items .familiars").click(function(){
  7. selected= $(this).index();
  8. petID= $(this).attr("id");
  9. $("#familiar_items .familiars").css('border-color', 'lightskyblue');
  10. $(this).css('border-color', 'lightgreen');
  11. $("#up_" + petID).click(function(e){
  12. if(selected > 0){
  13. itemlist = $('#familiar_items');
  14. console.log(selected);
  15. jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
  16. e.preventDefault();
  17. }
  18. });
  19. $("#down_" + petID).click(function(e){
  20. if(selected < len) {
  21. itemlist = $('#familiar_items');
  22. console.log(selected);
  23. jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
  24. e.preventDefault();
  25. }
  26. });
  27. });
  28. });


z tym, że teraz w konsoli dostaje
0
(5)1
(9)2
(13)3
(17)4
i za pierwszym klinięciem w dół przeskakuje, a każde kolejne muszę kliknąć dwa razy by była reakcja.

Go to the top of the page
+Quote Post
viking
post 28.12.2022, 09:01:00
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Otwórz sobie konsolę, poklikaj up i zobacz co się loguje w konsoli.
https://jsfiddle.net/8w7smqhL/


--------------------
Go to the top of the page
+Quote Post
topcio
post 28.12.2022, 22:15:34
Post #9





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Nie wiem, niestety nie posiadam takiej wiedzy jak Ty. nie potrafię dojść w ten sposób do tego co mam nie tak.
Go to the top of the page
+Quote Post
viking
post 29.12.2022, 11:28:34
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Pokazałem jak możesz dobierać się do elementów po kliknięciu. Czytaj, ucz się. Samo nie przyjdzie.


--------------------
Go to the top of the page
+Quote Post
topcio
post 29.12.2022, 13:58:01
Post #11





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Problem w tym, iż gdy przekopiuje to co pokazałeś do mnie, ustawię takie ID dla up down, to u mnie konsola nic nie pokazuje po kliknięciu

Ok to był mój błąd, pojawia się ale co dalej, no nic będę sam męczył.
Nie pierwszy raz tu się nie pomaga.
To tak jakby w szkole powiedzieć dziecku masz książkę, ucz się sam.
Ale dzięki za chęci.

Ten post edytował topcio 29.12.2022, 14:06:33
Go to the top of the page
+Quote Post
viking
post 29.12.2022, 14:22:48
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Przyszedłeś z problemem kilkukrotnych klików. I pokazałem Ci jak sobie z nim poradzić. A że jesteś leń i czekasz na hotowca to inna sprawa. Naprawdę nie jest przyjemne przeglądanie takiej sieczki jak masz w kodzie więc chociaż fajnie jak byś się przyłożył i wrzucił okrojony kod na jsfiddle.


--------------------
Go to the top of the page
+Quote Post
topcio
post 30.12.2022, 00:52:07
Post #13





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Niestety to Twój punkt widzenia, gdybym czekał na gotowca to nie miałbym nic napisane.
Przychodzę z problemem gdy nie mogę poradzić sobie sam.
No ale ok, dzięki za chęci.
Nie wiem co dla Ciebie jest sieczką, bo dla mnie jest czyste i przejrzyste.
No ale co autor to inne pisanie.
A zakładając z góry że ktoś jest leń, wystawiasz sobie świadectwo.
Dziękuję za pomoc, może ktoś bardziej kompetentny się jeszcze wypowie.

Tak dla potomnych

Zrobiłem, działa.

  1. $(document).ready(function(){
  2. var selected = null;
  3. var petID='';
  4. var itemlist = $('.familiars');
  5. var len=$(itemlist).length;
  6. $("#familiar_items .familiars").click(function(){
  7. selected= $(this).index();
  8. petID= $(this).attr("id");
  9. $("#familiar_items .familiars").css('border-color', 'lightskyblue');
  10. $(this).css('border-color', 'lightgreen');
  11. $("#up_" + petID).click(function(e){
  12. e.preventDefault();
  13. if(selected > 0){
  14. itemlist = $('#familiar_items');
  15. jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
  16. }
  17. });
  18. $("#down_" + petID).click(function(e){
  19. e.preventDefault();
  20. if(selected < len) {
  21. itemlist = $('#familiar_items');
  22. jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
  23. }
  24. });
  25. });
  26. });


A problemem było to, że niestety w PHP pomiędzy DIV miałem ukryte inputy, które były traktowane również jako dzieci , nie zwróciłem na to uwagi.
Gdy przeniosłem je na koniec listy poza obsługiwanego diva, wszystko działa poprawnie.
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: 27.04.2024 - 17:59