Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bardziej elastyczny skrypt dodawania pola
JamalBIG
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 1
Dołączył: 16.01.2008
Skąd: Świnoujście

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


Witam

Mógł bym prosić o pomoc w zmodyfikowaniu poniższego kodu JavaScript tak aby mógł obsługiwać więcej niż jedno pole w formularzu (skrypt dodaje pola w przypadku jeżeli ktoś chce dodać więcej pozycji a ja potrzebuje go do obsługi kilku pól np. zainteresowania, osiągnięcia itp., nie chce powielać kilka razy tego samego kodu zmieniając tylko id), dopiero się 'uczę' tego języka dlatego wszelkie uwagi i podpowiedzi będą na wagę złota (IMG:style_emoticons/default/wink.gif)

Plik js:
Kod
var addElement = function(){
    var count = document.getElementById('counter'); //uchwyt do licznika elementow
    var counter = parseInt(count.value); //pobieramy wartosc licznika elementow
    counter += 1; //zwiekszamy ja o 1
    count.value = counter; //i aktualizujemy
    var container = document.getElementById('elements'); //uchwyt do bloku w ktorym
    //beda pojawiac sie nowe elementy
    var newDiv = document.createElement('div'); //tworzymy nowy div, ktory potem
    //wstawimy do kontenera
    newDiv.setAttribute('id','div'+counter); //dodajemy mu atrybut id w celu
    //mozliwosci usuniecia tego elementu
    newDiv.innerHTML = '<input id="element'+counter+'" type="text" class="text" id="element[]" value="" /><span class="removeelement" onclick="removeElement(\'div'+counter+'\')">Usuń</span>';
    //jako zawartosc html nowego diva dodajemy kolejne elementy - pole tekstowe
    //o unikalnym, inkrementowanym ID
    //i spana z wywolaniem akcji usunienia konkretnego bloku div
    container.appendChild(newDiv); //tutaj dodajemy kolejne "dzieci" - nowe elementy
    //dla kontenera elementow
}
var removeElement = function(removeId){
    //jako paramter przechwytujemy id bloku do usuniecia
    var container = document.getElementById('elements');
    //tworzymy uchwyt do kontenera elementow
    var toRemove = document.getElementById(removeId);
    //tworzymy uchwyt to obektu do usuniecia
    container.removeChild(toRemove);
    //i usuwamy "childa" z kontenera;)
}


Plik html
  1. <head>
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3. <script type="text/javascript" src="funkcje.js"></script>
  4. <style type="text/css">@import url("style.css");</style>
  5. </head>
  6. <body>
  7. <form name="form" action="" method="post">
  8. <input type="hidden" value="0" id="counter" />
  9. <span class="addelement" onClick="addElement();">
  10. Dodaj następny element...
  11. </span>
  12. <div id="elements">
  13. </div>
  14. <input type="submit" value="Wyślij" class="submit" />
  15. </form>
  16. </body>
  17. </html>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wszerad
post
Post #2





Grupa: Zarejestrowani
Postów: 106
Pomógł: 18
Dołączył: 11.12.2008

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


Nie ma to jak innerHTML nie:D
Ja sobie napisałem prostą funkcje:
  1. window['addHTML'] = function(){
  2. if(typeof arguments[0] === 'object') arguments = arguments[0];
  3. var obj = document.createElement(arguments[0]);
  4. for(var i=1;i<arguments.length;i++){
  5. if(typeof arguments[i] === 'function'){
  6. arguments[i](obj);
  7. }else if(arguments[i].split('=')[0]=='text'){
  8. obj.innerHTML = arguments[i].split('=')[1];
  9. }else{
  10. obj.setAttribute(arguments[i].split('=')[0],arguments[i].split('=')[1]);
  11. }
  12. }
  13. obj.addHTML = function(){
  14. return this.appendChild(window['addHTML'](arguments));
  15. }
  16. return obj;
  17. }

Użycie:
  1. var zmienna = 'moja_nazwa';
  2. var div = addHTML('div','class=klasa','id=id_elementu','text=zawartość_tekstowa','name='+zmienna,function(x){x.onclick = costam...}).addHTML(/*dodajemy kolejny element do tego elementu*/);
  3. //można też:
  4. div.addHTML(/*dodajemy kolejny element do tego elementu*/);

Kod napisałem lata temu ale nadal z niego korzystam i nie chce mi się go zmieniać.
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 08:02