Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] PreventDefault nie działa w połączeniu z delegate
pehaperowiec
post 7.01.2015, 00:50:44
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Kod
$().ready(function() {
   var a=0;
   $(".addMore a").on({
      click:function(e) {
         if(a==0) {
            $(".minusMore").prepend('<a href="">- Odejmij pole do wprowadzania wpływu</a>');            
         }
        
         a++;
        
         $('#addFormMoney>ul').append(
            '<li>'+
               '<p>'+(a+1)+'</p>'+
               '<div>'+
                  '<label>Podaj wartość wpływu</label>'+
                  '<input type="text" name="valueMoney[]" value="">'+
                  '<label>Wybierz kategorie wpływu</label>'+  
                  '<div>'+
                     '<h4><a href="#">Wybierz kategorie</a></h4>'+
                     '<ul>'+                                      
                        '<li><a href="">Bartons</a></li>'+
                        '<li><a href="">TLS</a></li>'+
                        '<li><a href="">kat 3</a></li>'+
                        '<li><a href="">kat 4</a></li>'+
                        '<li><a href="">kat 5</a></li>'+
                     '</ul>'+
                     '<select name="catEnter[]">'+
                        '<option value="Bartons" selected="selected">Bartons</option>'+
                        '<option value="TLS">TLS</option>'+
                        '<option value="kat 3">kat 3</option>'+
                        '<option value="kat 4">kat 4</option>'+
                        '<option value="kat 5">kat 5</option>'+
                     '</select>'+
                  '</div>'+
               '</div>'+
            '</li>'
         );
        
         e.preventDefault();
      }  
   });
  
   $(".minusMore").delegate("a","click",function(e) {
         $("#addFormMoney li").eq(a).remove();
         --a;
         if(a==0) {
            $(".minusMore").text(' ');      
         }
         e.preventDefault();  
   });  
  
   $("#addFormMoney ul").on("click","h4 a",function(e) {
      $(this).parent().next().fadeIn();
      e.preventDefault();  
   });
  
   $("#addFormMoney ul ul").on("click","li a",function(e) {
      var indexLi=$(this).parent().index();
      $(this).parent().parent().next().find("option").removeAttr("selected").eq(indexLi).attr({selected:"selected"});
      $(this).parent().parent().fadeOut();
      
      e.preventDefault();
   });
  
   $("#addFormMoney ul").on({
      click:function(e) {
        
        
         //e.preventDefault();
         //e.stopPropagation();
      }  
   });
  
  
   $("html").on({
      click:function() {
         //$("#addFormMoney ul ul").fadeOut();
      }  
   });
});
i HTML
  1. <div id="right">
  2. <h3>Dodaj wpływ</h3>
  3. <p class="addMore"><a href="">+ Dodaj kolejny wpływ jednocześnie</a></p>
  4. <p class="minusMore"></p>
  5. <form method="post" action="addenter.php" id="addFormMoney">
  6. <ul>
  7. <li>
  8. <p>1</p>
  9. <div>
  10. <label>Podaj wartość wpływu</label>
  11. <input type="text" name="valueMoney[]" value="">
  12. <label>Wybierz kategorie wpływu</label>
  13. <div>
  14. <h4><a href="#">Wybierz kategorie</a></h4>
  15. <ul>
  16. <li><a href="">Bartons</a></li>
  17. <li><a href="">TLS</a></li>
  18. <li><a href="">kat 3</a></li>
  19. <li><a href="">kat 4</a></li>
  20. <li><a href="">kat 5</a></li>
  21. </ul>
  22. <select name="catEnter[]">
  23. <option value="Bartons" selected="selected">Bartons</option>
  24. <option value="TLS">TLS</option>
  25. <option value="kat 3">kat 3</option>
  26. <option value="kat 4">kat 4</option>
  27. <option value="kat 5">kat 5</option>
  28. </select>
  29. </div>
  30. </div>
  31. </li>
  32. </ul>
  33. <input type="submit" value="Dodaj nowy wpływ">
  34. </form>
  35. <?php
  36. echo '<pre>';
  37. print_r($_POST);
  38. echo '</pre>';
  39. ?>
  40. </div>
Najpierw za pomocą linku o selektorze "#addFormMoney ul h4 a" dodaje troche kodu HTML, czyli poleformularza typu tekstowego i seleca, którego wyłączam i styluje diva by mieć efekt ostylowanego selecta oraz 2 labele [działa]. Jeden taki zestaw jest dostepny zawsze, wybieram z opcji liste i opcja trafia do $_POST co też działa. Gdy jednak rozwine jakąś nowo dodaną liste i wybiorę jakąś opcje to strona się przeładowywuje. Tak jakby e.preventDefault nie działało. Dlaczego tak się dzieje. Z góry dziękuje za pomoc.

Ten post edytował pehaperowiec 7.01.2015, 00:53:05
Go to the top of the page
+Quote Post
Turson
post 7.01.2015, 07:51:45
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


http://stackoverflow.com/questions/1937114...reated-elements
Go to the top of the page
+Quote Post
pehaperowiec
post 7.01.2015, 09:54:41
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Jeśli dobrze rozumie, to powinienem przypisać zdarzenie click do jakiegoś istniejącego rodzica (czyli nie dodawanego przez append()). No to zmieniam:
Kod
$("#addFormMoney ul ul").on("click","li a",function(e) {
na
Kod
$("#addFormMoney ul").on("click","ul li a",function(e) {
no ale niestety dalej jest to samo. Mógłbyś mi dokładniej wyjaśij w czym tkwi problem?
Go to the top of the page
+Quote Post
Turson
post 7.01.2015, 10:16:56
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Daj jakiś alert zeby w ogole sprawdzic czy event sie wykonuje
Go to the top of the page
+Quote Post
pehaperowiec
post 7.01.2015, 10:38:36
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


tak, alert działa
Go to the top of the page
+Quote Post
Turson
post 7.01.2015, 10:42:10
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Spróbuj z
Kod
return false;
zamiast
Kod
e.preventDefault();
Go to the top of the page
+Quote Post
pehaperowiec
post 7.01.2015, 10:47:33
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Próbowałem już wcześniej i z return false, stopPropagination i preventDefault i dalej nic

Kod
$('#addFormMoney>ul').append(
                '<li>'+
                    '<p>'+(a+1)+'</p>'+
                    '<div>'+
                        '<label>Podaj wartość wpływu</label>'+
                        '<input type="text" name="valueMoney[]" value="">'+
                        '<label>Wybierz kategorie wpływu</label>'+    
                        '<div>'+
                            '<h4><a href="#">Wybierz kategorie</a></h4>'+
                            '<ul>'+                                        
                                '<li><a href="">Bartons</a></li>'+
                                '<li><a href="">TLS</a></li>'+
                                '<li><a href="">kat 3</a></li>'+
                                '<li><a href="">kat 4</a></li>'+
                                '<li><a href="">kat 5</a></li>'+
                            '</ul>'+
                            '<select name="catEnter[]">'+
                                '<option value="Bartons" selected="selected">Bartons</option>'+
                                '<option value="TLS">TLS</option>'+
                                '<option value="kat 3">kat 3</option>'+
                                '<option value="kat 4">kat 4</option>'+
                                '<option value="kat 5">kat 5</option>'+
                            '</select>'+
                        '</div>'+
                    '</div>'+
                '</li>'
            );
Zagnieżdżona lista wink.gif
Go to the top of the page
+Quote Post
trueblue
post 7.01.2015, 10:49:04
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Na pewno nie działa $("#addFormMoney ul").on("click","ul li a".... ?

http://jsfiddle.net/5rv8s7p8/


--------------------
Go to the top of the page
+Quote Post
pehaperowiec
post 7.01.2015, 10:59:43
Post #9





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


http://jsfiddle.net/5rv8s7p8/1/

Żapisz sobie na kompie, bo jsFiddle jest całkiem inny efekt. Input[type="submit"] powinien być na samym dole, a kolejne elementy listy powinny być dodawane między pierwszą pozycją listy a tym submitem. Ponadto na jsFiddle zauważyłem ciekawą rzecz. Pierwszym razem, na nowo dodanym elemencie działa zmiana wartości listy - przypisanie wartości do selecta a za drugim już nie. Zobacz to najlepiej offline
Go to the top of the page
+Quote Post
trueblue
post 7.01.2015, 11:08:58
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Przykład, który podałeś działa bez problemu offline.
Czy tam submit jest w odpowiednim miejscu?


--------------------
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: 14.08.2025 - 07:21