Scriptet styrer når man trykker på tilføj (add) og slet (delete) fakturalinje på den side hvor man kan redigere/oprette fakturaer. Men den opfører sig mærkeligt, når man gør følgende.
Man trykker først på Tilføj linje (addline()) og der kommer en linje frem. Man udfylder nogle af felterne i denne linje. Når man så trykker på addline() igen, så tømmes felterne i den første linje?! - Det forstår jeg ikke... har forsøgt at "troubleshoote" så meget som jeg kan, men kan ikke finde fejlen.
Så tilføjer du faktisk hele den gamle html en gang til - altså du sletter alt hvad der står og overskriver det med noget nyt - hvoraf noget af det svarer til det gamle.
Prøv at bruge document.getElementById('linjer').appendChild i stedet - måske bare direkte, måske skal din div være et rigtigt element først :)
appendChild er en metode, der hører til ECMA-DOM bindingerne - og den kan ikke bruges med en HTML-streng. Typisk bruges den som følger:
function addSpan(elm) { var txt, sp = document.createElement("span"); sp.style.color = "red"; elm.appendChild(sp); txt = document.createTextNode("En test af en slags ..."); sp.appendChild(txt); }
Problemet er, at du altid vil overskrive dit 'linjer'-div med 'friske' input-felter, når du bruger innerHTML. Ved du i øvrigt, man slet ikke kan bruge innerHTML under XHTML?
Skal du tilføje linier uden at tømme felter, skal du bruge DOM på samme måde, so jeg viste i (07/04-2005 16:55:37). Du opretter elementer med: elm = document.createElement("TAG_NAVN") - tekst med: txt = document.createTextNode("Tekst"); - styler et element med: elm.style.color = "red" - sætter attributter med: elm.setAttribute("colSpan", 3) - tilføjer en node til en anden med: elm.appendChild(txt)
Nu er der jo tale om en forholdsvis kompleks struktur, du skal lave - og så kan følgende fremgangsmåde ofte være en fordel:
<script type="text/JavaScript"> function addElm(from, to) { var node; from = document.getElementById(from); to = document.getElementById(to); node = from.cloneNode(true); // true gør, at childnodes også klones node.getElementsByTagName("input")[0].setAttribute("name", "hest_input_et_eller_andet"); to.appendChild(node); } </script>
Nej, hvis du bruger ting som 'innerHTML', 'document.forms' eller 'document.images', kan browseren ikke tolke koden som XHTML og HTML-parseren tager i stedet over. Det betyder at koden så bliver parsed som fejlfyldt, da DTD'en så er forkert i forhold til indholdet - samtidig med, at alle dine ' />' ikke er tilladt i HTML og skal rettes af browseren, før dokumentet kan tolkes og vises.
Tak for rosen :) Ja, det er som oftest bedre performende, når man manipulerer dokumentet med DOM fremfor innerHTML. Til gengæld kan det fylde en bunke og tage tid at skrive, hvis man opretter hvert element og node for sig.
'Template' metoden, hvor man kloner et HTML-element, er på den anden side fantastisk overskuelig og let at arbejde med. Jeg anvender den selv en hel del - og kan absolut anbefale den. Faktisk har jeg ikke testet lige den metodes hurtighed, men den indebærer så væsentlige fordele, at de i sig selv afgør mit valg. Den dag - Fanden forbyde, den måtte komme - hvor jeg dynamisk skal skrive 1000 tabeller under hinanden, foretager jeg måske en test :)
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.