Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Błąd z dynamicznym formularzem
viamarimar
post
Post #1





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

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


Chce zrobic dynamiczne pole formularza. Ogolnie wiem jak to zrobic i juz mi sie udalo jednak tworzac kolejne pola i klikajac dodaj nastepne, chailbym aby każde kolejne mi się podpisywalo pole1 pole2 pole3 itp
Aby wykonac tę czynnosc dodalem do mojego skryptu taki kod:

  1. i++;
  2. var tekst = document.createTextNode('pole '+i+': ');

jednak przez to caly kod przestal dzialac? o co tu chodzi? gdy to kasuje dziala normalnie? Wydaje mi sie iz powinno inkrementowac i wyswietlac kolejne nazyw dlaczego to sie nie dzieje?


Skrypt formularza i js:

  1. <div class="form-group">
  2. <label class="col-sm-3 control-label" for="cvv">Składniki(oddziel przecinkami):</label>
  3. <div id="pliki" class="col-sm-9">
  4. <textarea class="form-control skladniki" name="plik[]" placeholder="Message" rows="5"></textarea>
  5.  
  6. </div>
  7. </div>
  8. <div class="form-group">
  9. <input type="button" value="Załšcz kolejny plik" onclick="dodaj_element('pliki');" />
  10. </div>


  1. <script type="text/javascript">
  2. <!--
  3. function dodaj_element(kontener){
  4. i++;
  5. var tekst = document.createTextNode('pole '+i+': ');
  6. var znacznik = document.createElement('textarea');
  7. znacznik.setAttribute('type', 'text');
  8. znacznik.setAttribute('name', 'plik[]');
  9. znacznik.className = 'skladniki';
  10. var kontener = document.getElementById(kontener);
  11. kontener.appendChild(znacznik);
  12. }
  13. //-->
  14. </script>
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


1. nie masz zadeklarowanej wartości i
2. i jest "zadejkarowane lokalnie w funkcji więc kolejne wywołania nie zwiększają i globalnie.

Zadeklaruj 'i' w przestrzeni globalnej (poza funkcją) i powinno zadziałać.

Poza tym sprawdzaj konsolę przeglądarki jaki błąd wywala.
Go to the top of the page
+Quote Post
viamarimar
post
Post #3





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

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


-nie bardzo zmiana zmiennej na globalna nic nie zmienia
-ustalenie drugiej globalnej za wiele nie zmienia..
-konsola..hmm duzo bledow tam ale zwizaznych chyba nie tylko z tym a nie wszystkie umiem czytac

Poprawienie w ten sposob:

  1. <script type="text/javascript">
  2. <!--
  3.  
  4. function dodaj_element(kontener){
  5. var i;
  6. i++;
  7. var tekst = document.createTextNode('pole '+i+': ');
  8. document.body.appendChild(tekst);
  9. var znacznik = document.createElement('textarea');
  10. znacznik.setAttribute('type', 'text');
  11. znacznik.setAttribute('name', 'plik[]');
  12. znacznik.className = 'skladniki';
  13. var kontener = document.getElementById(kontener);
  14. kontener.appendChild(znacznik);
  15.  
  16. }
  17. //-->
  18. </script>


Teraz problem w tym ze pola sie dodaja , wyswietla sie pole Nan Pole Nan .. pod calym kodem strony a nie obok kolejnego stworzonego pola(fizycznie ze tak powiem) da sie to zmienic?
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Teraz masz zmienną lokalną, nie globalną - więc tym bardziej nie działa. Poza tym inkrementować można tylko liczby, a nie undefined.

Co do wstawiania na końcu strony - wywal to document.body.appendChild i po wstawieniu samego pola użyj insertAfter, żeby wstawić tekst po nim
Go to the top of the page
+Quote Post
viamarimar
post
Post #5





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

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


No ok, dodawanie mi działa. Próbowałem zrobić jeszcze usuwanie tworzonych pol i tez jest problem. Prawdopodobnie dlatego ze
"$(document).ready(function() {" w żaden spsob nie odnosi sie do zawartosci funkcji wiec elementy takie jak znacznik,kontener,pliki sa niewidoczne poza nia? Prosil bym o wskazowke jak zrobic usuwanie pol formularza

Do kazdego pola jest robiony $('<a href="#" class="delfield">usuń</a>').insertBefore(znacznik); jakby przycisk? chodz nie wiem czy to dobra metoda..

To wstawianie pomimo ze dziala tez moglby ktos ocenic czy jest ok?

  1. <script type="text/javascript">
  2. <!--
  3. var i = 1;
  4.  
  5. function dodaj_element(kontener){
  6. i++;
  7. var tekst = document.createTextNode(' Nr. '+i+' ');
  8. var znacznik = document.createElement('textarea');
  9.  
  10. znacznik.setAttribute('type', 'text');
  11. znacznik.setAttribute('name', 'plik[]');
  12. znacznik.setAttribute('placeholder', 'Wpisz nazwe składnika oraz jego wymaganą ilość... ');
  13.  
  14. znacznik.className = 'skladniki';
  15. var kontener = document.getElementById(kontener);
  16. kontener.appendChild(znacznik);
  17. $(tekst).insertBefore(znacznik);
  18. $('<a href="#" class="delfield">usuń</a>').insertBefore(znacznik);
  19. }
  20.  
  21.  
  22. $(document).ready(function() {
  23. $('a.delfield').live('click', function(){
  24. pliki.removeChild(znacznik);
  25. });
  26. }
  27. //-->
  28. </script>


Ten post edytował viamarimar 9.06.2015, 11:33:36
Go to the top of the page
+Quote Post
Comandeer
post
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Usunąć można element znajdujący się za linkiem (nextElementSibling AFAIR)
Go to the top of the page
+Quote Post
viamarimar
post
Post #7





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

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


Mam jeszcze jeden mały problem nie umiem naprawić inkrementacji po usunięciu dynamicznego pola, mógłby mi ktoś z tym pomoc?

Na 100% problem lezy tutaj:
  1. function usun_element(x){
  2.  
  3. var x = document.getElementById("xxx").nextElementSibling.remove();
  4. var x = document.getElementById("xxx").remove();
  5. i--;
  6. }

i chyba trzeba zrobic cos w ten desen:
  1. x.parentNode.removeChild(document.getElementById('xxx'+(i--)));

ale powyzszy kod nie dziala ;/ jak to zmodyfikowac?

  1. <script type="text/javascript">
  2. <!--
  3. var i = 1;
  4.  
  5. function dodaj_element(){
  6. i++;
  7.  
  8. var child = document.createElement('input') ;
  9. var parent = document.getElementById('skladniki');
  10.  
  11. child.setAttribute('type', 'text');
  12. child.setAttribute('name', 'skladniki[]');
  13. child.setAttribute('id', 'xxx');
  14. child.setAttribute('placeholder', 'Wpisz nazwe składnika, podaj ilość i jednostkę miary.. ');
  15. child.className = 'form-control';
  16.  
  17.  
  18. parent.appendChild(child);
  19. $('<p class="marg2" >Składnik '+i+'</p>').insertBefore(child);
  20.  
  21.  
  22. }
  23.  
  24. function usun_element(x){
  25.  
  26. var x = document.getElementById("xxx").nextElementSibling.remove();
  27. var x = document.getElementById("xxx").remove();
  28. i--;
  29. }
  30.  
  31. //-->
  32. </script>
  33. <div class="form-group" id="s">
  34. <label class="col-sm-3 control-label">Składniki</label>
  35.  
  36. <div id="skladniki" class="col-sm-9"><p>Składnik 1</p>
  37. <input id="xxx" class="form-control" name="skladniki[]" placeholder="Wpisz nazwe składnika, podaj ilość i jednostkę miary.. " type="text">
  38. </div>
  39.  
  40. <div class="col-sm-12 ">
  41. <!-- <input type="button" name="insertfield" value="dodaj" /> -->
  42. <button type="button" class="btn btn-primary btn-xs pull-right marg2 pad" onclick="dodaj_element();" /> Dodaj składnik </button>
  43. <button type="button" class="btn btn-danger btn-xs pull-right marg2 pad " onclick="usun_element(this);" /> Usuń składnik </button>
  44. </div>
  45. </div>
  46.  
  47.  


Ten post edytował viamarimar 9.06.2015, 22:27:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:52