Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Dynamiczne tworzenie 2 pól input w formularzu
Savage.Mephisto
post 28.07.2009, 08:50:45
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


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>


Ten post edytował Savage.Mephisto 28.07.2009, 08:51:31


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
Go to the top of the page
+Quote Post
erix
post 28.07.2009, 11:46:21
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Savage.Mephisto
post 28.07.2009, 12:40:27
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


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.


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
Go to the top of the page
+Quote Post
erix
post 28.07.2009, 13:11:33
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Savage.Mephisto
post 28.07.2009, 13:21:27
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


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.


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
Go to the top of the page
+Quote Post
erix
post 28.07.2009, 13:32:05
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Savage.Mephisto
post 28.07.2009, 13:47:22
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


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.


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
Go to the top of the page
+Quote Post
erix
post 28.07.2009, 13:52:05
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ja nie pisałem, że trzeba poza, tylko w fieldset.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Savage.Mephisto
post 29.07.2009, 09:13:06
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


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>


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
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.07.2025 - 22:55