Avatar billede tif12345 Nybegynder
30. maj 2008 - 13:28 Der er 6 kommentarer og
1 løsning

Tilføj slet elementer

Baseret på: http://www.dustindiaz.com/add-remove-elements-reprise/
ORG demo: http://www.dustindiaz.com/basement/add-remove.html

Jeg har genbrugt fuldstændig den samme kode som i demonstrations linket nederst.. Min tanke var at jeg ville bruge det til at man som bruger kunne tilføje x antal ønsket <input> felter i en form. Hvilket ser således ud:

      Event.add(window, 'load', function() {
        var i = 0;
        Event.add('add-element', 'click', function() {
          var el = document.createElement('p');
          el.innerHTML = '<input type="text" name="test" value="input field" /> (' + ++i + ')';
          Dom.add(el, 'content');
          Event.add(el, 'click', function(e) {
            Dom.remove(this);
          });
        });
      });

Men som det virker nu, så er input feltet 'clickable' , så klikker man og vil skrive noget i input feltet, ja så fjernes det.. Findes der en nem løsning, hvor man kunne smide et remove link ved siden af formen, så blot dette var clickable og ikke selve input feltet?

Håber det gav mening, ellers spørg endelig :)
Avatar billede w13 Novice
30. maj 2008 - 14:32 #1
Du blander DOM og innerHTML, som er 2 ret modstridende størrelser.

Jeg ville gøre således:
***********************************
      Event.add(window, 'load', function() {
        var i = 0;
        Event.add('add-element', 'click', function() {
          var el = document.createElement('p');
          var el2 = document.createElement('input');
          el2.setAttribute("type","text");
          el2.setAttribute("name","test"+i);
          el2.value="input field";
          el.appendChild(el2);
          el.appendChild(document.createTextNode(' ('+(++i)+') '));
          el2 = document.createElement('span');
          el2.appendChild(document.createTextNode('Slet'));
          Event.add(el2, 'click', function(e) {
            Dom.remove(this.parentNode);
          });
          el.appendChild(el2);
          Dom.add(el, 'content');
        });
      });
Avatar billede w13 Novice
30. maj 2008 - 14:32 #2
Dog meget utestet. =)
Avatar billede olebole Juniormester
31. maj 2008 - 20:12 #3
<ole>

I IE kan kan ikke oprette elementer med valid DOM scripting, hvis de indeholder en name-attribut. Det skal gøres sådan:
    var el2 = document.createElement("<input type='text' name='test"+i+"'>");

Desuden er det noget af en kunst at nedlægge elementer, som har fået tilføjet en event handler, uden at skabe memory leaks. Alene det at tilføje en event handler før elementet indsættes i dokumentets DOM-træ, skaber en memory leak i IE  :o|

/mvh
</bole>
Avatar billede tif12345 Nybegynder
02. juni 2008 - 11:24 #4
Hey alle,

tak for jeres svar..

w13 - dit eksempel virkede lige efter hensigten! så det var perfekt :) ..

Jeg har dog fundet ud af at den løsning jeg søger er en del mere omfattende. Jeg har prøvet at ændre / tilføje lidt i w13 løsning.

Problemet er, at jeg skal ha inkorporeret en dynamisk feature i en select, eks:
<select name="valg[]">
<option value="1">Mulighed 1</option>
<option value="2">Mulighed 2</option>
<option value="3">Mulighed 3</option>
</select>

Hvor der til hver <option> bliver hentet dynamisk indhold ind fra databasen.

Tankegangen er stadig den samme, for hver gang man trykker add element, så tilføjes der en <select> dropdown samt efterfølgende input felt. Så var der filføjet 3 elementer, kunne det se således ud:

<select name="valg[]">
    <option value="$">$tekst</option>
</select>
<input type="text" name="test[]"/>

<select name="valg[]">
    <option value="$">$tekst</option>
</select>
<input type="text" name="test[]"/>

<select name="valg[]">
    <option value="$">$tekst</option>
</select>
<input type="text" name="test[]"/>

Jeg har prøvet at gøre mig klog på en løsning, men er desværre ikke helt på toppen med javascript.. Mit eksempel kan ses her:
http://70.84.116.170/~skole/admin/formdrop.php

- Lige pt bliver der tilføjet en ny option og input felt for hver gang man trykker add.. Men har ikke kunnet få det flettet ordentligt ind som jeg vil (sikkert pga min manglende viden)

w13's uredigeret her:
http://70.84.116.170/~skole/admin/form.php

Forslag er meget velkommen .. Er lidt på bar' bund med dette :/

(smider gerne en god bunke ekstra points i nakken på en god hjælper)
Avatar billede tif12345 Nybegynder
13. februar 2010 - 14:11 #5
W13 smid et svar
Avatar billede w13 Novice
13. februar 2010 - 17:34 #6
Kommer her! :)
Avatar billede w13 Novice
13. februar 2010 - 19:38 #7
Tak for point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester