Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Dynamiczne tworzenie 2 pól input w formularzu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Savage.Mephisto
Mam problem z napisaniem działającej funkcji przy użyciu frameworka jQuery w wersji 1.3.2. Jej zadaniem ma być dynamiczne dodawanie 2 pól typu input i opcjonalnie ich kasowanie (name="cena[]" oraz name="rozmiar[]"). Na razie napisałem kod odpowiedzialny za dodawanie jednego inputa.

Kod
<script type="text/javascript">
// <![CDATA[
    $(document).ready(
    function() {
        $("#dodaj_cene").click(function() {
            var new_label = $("<label></label>");
            var new_input = $("<input type=\'text\' name=\'cena[]\' />");
             var new_link = $("<a></a>");
            new_link.attr("href", "#");
            new_link.html("usuń");
            new_link.click(function() {
                $(this).parent("label").remove();
                return false;
            });
            new_label.append(new_input);
            new_label.append(new_link);
            $("form[name=formularz]").append(new_label);
            return false;
        });
    });
// ]]>
</script>


  1. <form name="formularz" class="art_edit" enctype="multipart/form-data" action="?go=towarinsert_" method="post">
  2. <span class="link1"><a href="#" id="dodaj_cene">Dodaj cenę</a></span>
  3. <label style="text-align: center;">
  4. <input type="hidden" value="'.$id.'" name="dzial" />
  5. <input style="width: 200px;" type="submit" value="Zapisz" />
  6. </label>
  7. </form>


Niestety po kliknięciu na link "Dodaj cenę" nic nie fuka, nic nie buczy.
Pomoże ktoś?


Usprawniłem nieco skrypt odpowiedzialny za dodawanie 2 dynamicznych inputów, ale kilka problemów zaprząta mi głowę. Po pierwsze po kliknięciu na link 'Dodaj cenę rozmiar' pojawiają się co prawda 2 dynamiczne inputy, tyle że pod formularzem (chciałbym aby wyświetlały się pod nazwą produktu). W dodatku trudność stanowi dla mnie usunięcie 2 niepotrzebnych inputów (na razie działa kasowanie tylko jednego inputa z rozmiarem). Nie jestem specjalistą od jQuery, więc proszę o wyrozumiałość i pomoc.

Kod
<script type="text/javascript">
// <![CDATA[
     $(document).ready(
     function() {
         $("#dodaj").click(function() {
             var new_label1 = $("<label>Cena: </label>");
             var new_label2 = $("<label>Rozmiar: </label>");
             var new_input1 = $("<input type=\'text\' name=\'cena[]\' />");
             var new_input2 = $("<input type=\'text\' name=\'rozmiar[]\' />");
             var new_link = $("<a></a>");
             new_link.attr("href", "#");
             new_link.html("usuń");
             new_link.click(function() {
                 $(this).parents("label").remove();
                 return false;
             });
             new_label1.append(new_input1);
             new_label2.append(new_input2);
             new_label1.append(new_link);
             new_label2.append(new_link);
             $("form[name=formularz]").append(new_label1);
             $("form[name=formularz]").append(new_label2);
             return false;
         });
     });
// ]]>
</script>


  1. <form name="formularz" class="art_edit" enctype="multipart/form-data" action="?go=towarinsert_" method="post">
  2. <span class="opis">Nazwa:</span>
  3. <input type="text" name="nazwa" />
  4. </label>
  5. <span class="link1" style="display: block; text-align: left; padding: 20px 0px;"><a href="#" id="dodaj">Dodaj cenę i rozmiar</a></span>
  6. <span class="opis">Kolor:</span>
  7. </label>
  8. '.$checkbox_txt.'
  9. <span class="opis">Opis:</span><br />
  10. <textarea class="mceEditor" name="opis" rows="" cols=""></textarea>
  11. </label>
  12. <br />
  13. <span class="opis">Zdjęcie duże:</span>
  14. <input type="file" name="fileImage" />
  15. </label>
  16. <br /><br />
  17. <span class="opis">Aktywny:</span>
  18. <select name="active" style="width: 200px;">
  19. <option value="t" selected="selected">Tak</option>
  20. <option value="n">Nie</option>
  21. </select>
  22. </label>
  23. <br />
  24. <span class="opis">Dostępność:</span>
  25. <select name="dostepnosc" style="width: 200px;">
  26. <option value="produkt dostępny" selected="selected">produkt dostępny</option>
  27. <option value="produkt chwilowo niedostępny">produkt chwilowo niedostępny</option>
  28. <option value="produkt niedostępny">produkt niedostępny</option>
  29. </select>
  30. </label>
  31. <br /><br />
  32. <label style="text-align: center;">
  33. <input type="hidden" value="'.$id.'" name="dzial" />
  34. <input style="width: 200px;" type="submit" value="Zapisz" />
  35. </label>
  36. </form>
erix
Cytat
2 dynamiczne inputy, tyle że pod formularzem (chciałbym aby wyświetlały się pod nazwą produktu).

Zapomniałeś chyba o tym, że wszystkie elementy objąłeś w fieldset. ;]

Cytat
W dodatku trudność stanowi dla mnie usunięcie 2 niepotrzebnych inputów (na razie działa kasowanie tylko jednego inputa z rozmiarem).

Puść gdzieś to na żywo.
Savage.Mephisto
Erix, dzięki za jakiekolwiek zainteresowanie.
Działanie skryptu można zobaczyć pod adresem: http://www.stronyinternetowe.radom.pl/paola/new/index.php.
Proszę o jakieś wskazówki, które pomogą mi poprawić wyżej wymieniony skrypt.
erix
Ok, na pierwszy rzut oka wygląda to tak:
Link masz po prostu w jednym label, a po wskazaniu na parents() zwracany jest tylko on. Sąsiedniego (z drugim polem) już nie uzyskujesz.

Swoją drogą, nie mogę pojąć jednego, czemu sobie tak utrudniasz życie:
Kod
var new_link = $("<a></a>");
            new_link.attr("href", "#");
            new_link.html("usuń");

Skoro i tak używasz innerHTML (vide: pierwsza linijka). Gdybyś robił w czystym DOM, to rozumiem - ale tutaj jest bez sensu. tongue.gif
Savage.Mephisto
Erix, nie jestem alfą i omegą jeśli chodzi o pisanie skryptów przy wykorzystaniu jQuery. Zresztą wcześniej o tym wspomniałem. Stąd to utrudnianie sobie życia. Nie mam zielonego pojęcia, jak to ugryźć, aby kod był w pełni funkcjonalny.
erix
Najlepiej będzie po prostu jeden wiersz (z oboma polami, linkiem do kasowania) objąć w jakiegoś diva i to jego kasować, a nie każdego labela z osobna.
Savage.Mephisto
Oki, to jeden problem z głowy. A jak w takim razie zmusić te dynamiczne inputy, aby ładowały się w formularzu pod polem nazwa? Wyrzucenie linka poza forma i fieldset nie dało oczekiwanych rezultatów.
erix
Ja nie pisałem, że trzeba poza, tylko w fieldset.
Savage.Mephisto
Dla zainteresowanych tematem.
Całkowicie od nowa napisałem skrypt i jego wersja finalna wygląda tak:

Kod
<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
    $(\'#elements .element a\').live(\'click\', function(){
       var parent = $(this).parent();
       if($(\'#elements .element\').index(parent)>0) parent.remove();
       return false;
    });
    $(\'#add\').click(function(){
       $(\'#elements .element:first\').clone().appendTo($(\'#elements\')).find(\'input\').val(\'\');
       return false;
    });
});  
// ]]>
</script>


  1. <form name="formularz" class="art_edit" enctype="multipart/form-data" action="?go=towarinsert_" method="post">
  2. <span class="opis">Nazwa:</span>
  3. <input type="text" name="nazwa" />
  4. </label>
  5. <br />
  6. <button id="add">dodaj cenę i rozmiar</button>
  7. <br /><br />
  8. <div id="elements">
  9. <div class="element">
  10. <label>Cena: <input type="text" name="cena[]"></label><br />
  11. <label>Rozmiar: <input type="text" name="rozmiar[]"></label><br />
  12. <a href="#">usuń</a>
  13. </div>
  14. </div>
  15. <br />
  16. <span class="opis">Opis:</span><br />
  17. <textarea class="mceEditor" name="opis" rows="" cols=""></textarea>
  18. </label>
  19. <br />
  20. <span class="opis">Zdjęcie duże:</span>
  21. <input type="file" name="fileImage" />
  22. </label>
  23. <br /><br />
  24. <span class="opis">Dodatkowe zdjęcie duże:</span>
  25. <select name="second_pict" style="width: 200px;" onchange="addField(this)">
  26. <option value="n" selected="selected">Nie</option>
  27. <option value="t">Tak</option>
  28. </select>
  29. </label>
  30. <label id="t">
  31. </label>
  32. <br />
  33. <span class="opis">Aktywny:</span>
  34. <select name="active" style="width: 200px;">
  35. <option value="t" selected="selected">Tak</option>
  36. <option value="n">Nie</option>
  37. </select>
  38. </label>
  39. <br />
  40. <span class="opis">Dostępność:</span>
  41. <select name="dostepnosc" style="width: 200px;">
  42. <option value="produkt dostępny" selected="selected">produkt dostępny</option>
  43. <option value="produkt chwilowo niedostępny">produkt chwilowo niedostępny</option>
  44. <option value="produkt niedostępny">produkt niedostępny</option>
  45. </select>
  46. </label>
  47. <br /><br />
  48. <label style="text-align: center;">
  49. <input type="hidden" value="'.$id.'" name="dzial" />
  50. <input style="width: 200px;" type="submit" value="Zapisz" />
  51. </label>
  52. </form>
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.