Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JS zmiana div góra/dół
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
topcio
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. }

trueblue
Atrybut id elementu ma wartość unikalną - nie może być kilka elementów z tym samym id.
topcio
no ma unikalną.
  1. id=\"down_" . $pet_Id . "\
viking
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
topcio
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ę
viking
Źle myślisz. Jaka to jest wersja jquery?
topcio
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.

viking
Otwórz sobie konsolę, poklikaj up i zobacz co się loguje w konsoli.
https://jsfiddle.net/8w7smqhL/
topcio
Nie wiem, niestety nie posiadam takiej wiedzy jak Ty. nie potrafię dojść w ten sposób do tego co mam nie tak.
viking
Pokazałem jak możesz dobierać się do elementów po kliknięciu. Czytaj, ucz się. Samo nie przyjdzie.
topcio
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.
viking
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.
topcio
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.
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-2024 Invision Power Services, Inc.