Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: [jQuery] PreventDefault nie dzia³a w po³±czeniu z delegate
Forum PHP.pl > Forum > Po stronie przegl±darki > JavaScript
pehaperowiec
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.
pehaperowiec
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?
Turson
Daj jaki¶ alert zeby w ogole sprawdzic czy event sie wykonuje
pehaperowiec
tak, alert dzia³a
Turson
Spróbuj z
Kod
return false;
zamiast
Kod
e.preventDefault();
pehaperowiec
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
trueblue
Na pewno nie dzia³a $("#addFormMoney ul").on("click","ul li a".... ?

http://jsfiddle.net/5rv8s7p8/
pehaperowiec
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
trueblue
Przyk³ad, który poda³e¶ dzia³a bez problemu offline.
Czy tam submit jest w odpowiednim miejscu?
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.