Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dodawanie pól input, automatyczne dodawanie pól formularza
fokra
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.10.2005

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


Sprawa jest taka, że nie znam JS, a potrzebuję formularza, który dodawałby pola typu 'file' do formularza nie kasując zapisanych wartości w poprzednich polach.. Konkretnie to chcę przesłać na serwer nieznaną wcześniej ilośc plików (np fotek) i po dodaniu każdego pliku chciałbym, żeby istniała możliwość bądź wysłania tego co jest bądź dołożenia kolejnego pliku (dopisania do formularza kolejnego pola input typu file).
Go to the top of the page
+Quote Post
gekon
post
Post #2





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


Ja bym to zrobił mniej więcej tak:
Kod
addFileInput = function(parentElement){
var inputName = prompt('Atrybut name dla kolejnego inputa', ' ');
var fileInput = document.createElement("input");
fileInput.type = "file";
fileInput.name = inputName;
fileInput.value = '';
parentElement.appendChild(fileInput,parentElement.firstChild);
}

window.onload=function(){
var insert = document.getElementById('addFileInput');
if(insert){
  insert.onclick = function(){
   addFileInput(insert.parentNode);
  }
}
else { return false; }
}

  1. <form id="fileForm" action="plik.php" method="get">
  2. <input type="button" id="addFileInput" value="dodaj pole pliku">
  3. <input type="submit" value="wyslij">
  4. <input type="file" name="imie" >
  5. </form>


--------------------
Pokaż kod = Pokaż CAŁY kod, najlepiej działający na jakimś serwerze.
Fanatycy | glazar.info | semantyka | HTML i XHTML FAQ
Go to the top of the page
+Quote Post
fokra
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.10.2005

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


Dzięki smile.gif działa świetnie.. ale tylko pod IE sad.gif
Niastety mam (i większość moich znajomków) mozillkę 1.7.2... a tu już sprawa wygląda gorzej.. po kliknięciu buttona 'dodaj plik' nie wskakuje nowe pole input..
Mam jednak coś co działa tylko.. sorki ale proszę mi wybaczyć zupełną zieloność nie wiem gdzie wstawić znacznik nowej lini żeby to jakoś wyglądało na stronce (no żeby nowy input wyskakiwał w nowym wierszu a nie obok poprzedniego.. No i czy to się da jakoś przerobić na zbilżony do pospolitego formularza (gdzie mogę określić metodę i skrypt docelowy php)w części kodu html?
oto kody JS i html
Kod
var countInputs = 0;
function addInput(id)
{

var oDiv = document.getElementById(id);
var inputElement = document.createElement("input");
inputElement.setAttribute("name","userfile_"+countInputs);
inputElement.setAttribute("type","file");
oDiv.appendChild(inputElement);
countInputs++;
}


  1. <div id="inputLayer"></div>
  2. <a href="javascript:addInput('inputLayer')">Dodaj plik</a>
Go to the top of the page
+Quote Post
TomASS
post
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Zademonstruje Ci na przykładzie selecta:
Kod
function $(id){
return document.getElementById(id);
}

function make_select(div){
    var select = document.createElement("select");
    select.name = "przeladunek_z["+numer+"][]";    
    var br = document.createElement("br");
    $(div).appendChild(br);                           //o cała tajemnica <Br>
    $(div).appendChild(select);    
}


  1. <form method="post" action="plik.php">
  2. <div id="inputLayer"></div>
  3. <a href="make_select('inputLayer');">Dodaj plik</a>
  4. </form>


--------------------
Go to the top of the page
+Quote Post
gekon
post
Post #5





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


Zamieniłbym jednak diva na fieldset.

A co do mojego przykładu, wystarczy usunąć linijkę:
Kod
fileInput.value = '';

i stara Mozilla powinna też łykać.


--------------------
Pokaż kod = Pokaż CAŁY kod, najlepiej działający na jakimś serwerze.
Fanatycy | glazar.info | semantyka | HTML i XHTML FAQ
Go to the top of the page
+Quote Post
fokra
post
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.10.2005

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


dzięki serdeczne smile.gif
ale niestety ten nie działa wogóle (mimo poprawienia błędu w linku do funkcji) ani w mozillce ani w IE sad.gif
cóż mimo wszystko dzięki.. już mam 3 różniste przykłady rozwiązania to może w końcu pojmę jak to-to (javascript) działa winksmiley.jpg
w każdym razie Dzięki ( również za to że nie dostałem tu wiązanki określającej precyzyjnie poziom mojej tępoty w zakresie JS.. winksmiley.jpg )
Go to the top of the page
+Quote Post
fokra
post
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.10.2005

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


witam wyjadaczy smile.gif

ktoś może wie dlaczego to mi działa w mozilli a w IE nie che??

Kod
<script type="text/javascript">
function addInput(id)
{
var countInputs = 0;
var Div = document.getElementById(id);
var inputElement = document.createElement("input");
var br = document.createElement("br");
inputElement.setAttribute("name","userfile_"+countInputs);
inputElement.setAttribute("type","file");
Div.appendChild(inputElement);
Div.appendChild(br);
countInputs++;
}
</script>


i

  1. <form method="post" action="plik.php" enctype= "multiple">
  2. <div id="inputLayer"></div>
  3. <br>
  4. <a style=text-decoration:none href="javascript:addInput('inputLayer')"><button>dodaj</button></a>
  5. <input type="submit" value="wyslij">
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Coś mi się widzi że o HTMLu słyszałeś tylko z daleka i niewyraźnie tongue.gif
  1. <script type="text/javascript">
  2. function addInput(id)
  3. {
  4.    var countInputs = 0;
  5.    var Div = document.getElementById(id);
  6.    var inputElement = document.createElement("input");
  7.    var br = document.createElement("br");
  8.    inputElement.setAttribute("name","userfile_"+countInputs);
  9.    inputElement.setAttribute("type","file");
  10.    Div.appendChild(inputElement);
  11.    Div.appendChild(br);
  12.    countInputs++;
  13. }
  14.  
  15. <form method="post" action="plik.php" enctype="multipart/form-data">
  16.  <div id="inputLayer"></div>
  17.  <br>
  18.  <input type="button" onclick="addInput('inputLayer'); return false;" value="dodaj" />
  19.  <input type="submit" value="wyslij" />
  20. </form>
Go to the top of the page
+Quote Post
yasiek
post
Post #9





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 4.06.2006
Skąd: Strzeszyce/Kraków

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


A jak dorzucić do tego kodu funkcję odwrotną - po kliknięciu znikają kolejne pola, które wcześniej się dodało? a gdybym chciał na przykład oprócz file dodać jeszcze select z ustalonymi wartościami do wyboru...?

Ten post edytował yasiek 29.10.2006, 14:21:42
Go to the top of the page
+Quote Post
wowerson
post
Post #10





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 22.03.2006

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


Cytat(mike_mech @ 7.04.2006, 22:37:14 ) *
Coś mi się widzi że o HTMLu słyszałeś tylko z daleka i niewyraźnie tongue.gif
  1. <script type="text/javascript">
  2. function addInput(id)
  3. {
  4.    var countInputs = 0;
  5.    var Div = document.getElementById(id);
  6.    var inputElement = document.createElement("input");
  7.    var br = document.createElement("br");
  8.    inputElement.setAttribute("name","userfile_"+countInputs);
  9.    inputElement.setAttribute("type","file");
  10.    Div.appendChild(inputElement);
  11.    Div.appendChild(br);
  12.    countInputs++;
  13. }
  14.  
  15. <form method="post" action="plik.php" enctype="multipart/form-data">
  16.  <div id="inputLayer"></div>
  17.  <br>
  18.  <input type="button" onclick="addInput('inputLayer'); return false;" value="dodaj" />
  19.  <input type="submit" value="wyslij" />
  20. </form>


Teraz take pytanko..jak przeiterować przez tak utworzoną tablicę w PHPie?
Go to the top of the page
+Quote Post
kryspi
post
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.04.2006
Skąd: Okolice Warszawy

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


Ja sie przylacze do tematu pozwole sobie zapytac sie w jaki sposob dobrac sie do wartosci tych pola dynamicznie dodawanych, zeby np je walidowac. Mam pola dodawane tak jak na ponizszym przykladzie ale nie wiem w jaki sposob przy pomocy JavaScriptu odczytac kolejne wartosci z powstalej tablicy:

  1. <?php
  2. var div = document.createElement('div');
  3. var data_wyjazdu = document.createElement('input');
  4. data_wyjazdu.setAttribute('type', 'text');
  5. data_wyjazdu.setAttribute('name', 'data_wyjazdu[]');
  6. data_wyjazdu.setAttribute('value', '0000-00-00');
  7. div.appendChild(data_wyjazdu);
  8. ?>
Go to the top of the page
+Quote Post
gekon
post
Post #12





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


@yasiek: dodawać id dla kazdego inputa i usuwac element odwolujac się do rodzica, np.:
  1. function deleteMe(handler){
  2. handler.onclick = function{
  3. this.parentNode.removeChild(this);
  4. }
  5. }

@wowerson: Można zmienić name na userfile[+countInputs+], wtedy jest regularna tablica.
@kryspi: getElementsByTagName('input')


--------------------
Pokaż kod = Pokaż CAŁY kod, najlepiej działający na jakimś serwerze.
Fanatycy | glazar.info | semantyka | HTML i XHTML FAQ
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 Aktualny czas: 22.08.2025 - 04:59