Avatar billede showsource Seniormester
05. juni 2007 - 07:32 Der er 21 kommentarer og
2 løsninger

Hvis ikke inner.HTML, hvad så?

Hej

function div_text($antal) {

    if(er_et_tal($antal) != false && $antal > 0) {
    var ialt = 0;
    var str = '';
      while(ialt < $antal) {
      str = str+'<br />\n<input type="file" name="upfile[]" size="32" onchange="vis_img(this.value);">';
      ialt++;
      }


    var file_ref = document.getElementById('uploadfelter');
    file_ref.firstChild.nodeValue = str;

<!-- document.getElementById('uploadfelter').innerHTML = str; //->
  }

}


Har nu læst en del spm. hvor det frarådes at bruge innerHTML
Har kikket efter alternativet, men kan sgutte finde noget?
Hvad skal man så bruge?

Og et link til en side som forklarer lidt om div. javascript, (appendChild, setAttribute, firstChild.nodeValue m.m.)
vil være meget fint!!!
Avatar billede mrbonus Novice
05. juni 2007 - 07:42 #1
innerText er et alternativ.

her er en rigtig god beskrivelse af alle dhtml tags.
http://msdn2.microsoft.com/en-us/library/ms535240.aspx
Avatar billede showsource Seniormester
05. juni 2007 - 07:52 #2
ehh, innnerText, er den xhtml gangbar?

Og du har vel ikke et link til en side som ikke tilhører MS :O) ( ikke at siden er dårlig, men... )
Avatar billede showsource Seniormester
05. juni 2007 - 08:14 #3
ehh, og b.t.w., ved at bruge innerText, vises felter som text, og ikke felter til upload :O)
Avatar billede showsource Seniormester
05. juni 2007 - 09:02 #5
appaendChild "tømmer" ikke div for felter, men lægger nye til eksisterende.

HTML koden som den ser ud lige nu, og virker:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>Upload af filer</title>

<script type="text/javascript">

function div_text($antal) {

    if(er_et_tal($antal) != false && $antal > 0) {
    var ialt = 0;
    var str = '';
      while(ialt < $antal) {
      str = str+'<br />\n<input type="file" name="upfile[]" size="32" onchange="vis_img(this.value);">';
      ialt++;
      }


    var file_ref = document.getElementById('uploadfelter');
    file_ref.innerHTML = str;

  }

}


function er_et_tal() {
    var reg = /^[\d]+$/;
    var navn = document.forms['do_upload'].elements['antal'];
    if(navn.value !='' && !navn.value.match(reg)){
      alert("Kun tal kan indtastes i feltet!");
      navn.value = '';
      return false;
    }
}

function vis_img(path) {

var ua = navigator.userAgent.toLowerCase();
var msie = ua.indexOf('msie');
var ope = ua.indexOf('opera');
    if (msie > -1 && ope < 1) {

    var filnavn = new String(path);
    filnavn = path.substring(path.lastIndexOf('\\')+1,path.length);
    filtypen = filnavn.substring(filnavn.lastIndexOf('.')+1,filnavn.length);
    filtypen = filtypen.toLowerCase();
    var img_reg = /^["gif","jpg","png","jpeg"]+$/;

    var vis_img = document.getElementById("img_pre");

        if(filtypen.match(img_reg)) {
        vis_img.getElementsByTagName("b")[0].firstChild.nodeValue = filnavn;
        vis_img.getElementsByTagName("img")[0].setAttribute("src", path);
        vis_img.style.display = "block";
        }else{
        vis_img.style.display = "none";
        }

    }
}

</script>

</head>
<body>

<form name="do_upload" enctype="multipart/form-data" action="/multi_upload.php" method="post">
Max. upload p&aring; en gang: <b>2Mb.!</b><br />
Antal felter: <input type="text" name="antal" onfocus="select();" onkeyup="er_et_tal();" size="2">
<input type="button" value="Vis felter" onclick="div_text(this.form.antal.value);vis_img('empty');" onkeydown="div_text(this.form.antal.value);vis_img('empty');">

<div id="uploadfelter">

<script type="text/javascript">
div_text(5);
</script>

</div>

<br />

<input type="submit" value="Upload">


</form>

<div id="img_pre" style="display: none;">Imagepreview af filen <b>&nbsp;</b><br /><img src="" width="200"></div>



</body></html>
Avatar billede showsource Seniormester
05. juni 2007 - 09:03 #6
ehh, og så er jeg ikke sikker på den med om det er en opera browser???
Avatar billede jensgram Nybegynder
05. juni 2007 - 09:24 #7
Hvis du vil tømme div'en, så

// remove all children from element
var element = document.getElementById("top");
while (element.firstChild) {
  element.removeChild(element.firstChild);
}


http://developer.mozilla.org/en/docs/DOM:element.removeChild
Avatar billede jensgram Nybegynder
05. juni 2007 - 09:25 #8
Avatar billede showsource Seniormester
05. juni 2007 - 11:18 #9
removeChild har jeg "tænkt" på, men er der ikke en nem måde a'la' innerHTML til at erstatte noget indhold?
Avatar billede jensgram Nybegynder
05. juni 2007 - 11:32 #10
Er det ikke blot en spm om at skrive egen "wrapper"-metode?

function replaceElements(pid, newElement) {
  element = document.getElementById(pid);
  while (element.firstChild) {
    element.removeChild(element.firstChild);
  }
  element.appendChild(newElement);
}
Avatar billede jensgram Nybegynder
05. juni 2007 - 11:34 #11
Man kan vel egentlig tilføje den til document som prototype... Er absolut ikke sikker på følgende, men:

object.replaceElement = function(pid, newElement) {
  ...
}
Avatar billede jensgram Nybegynder
05. juni 2007 - 11:35 #12
...den til object som proto...
Avatar billede olebole Juniormester
05. juni 2007 - 14:35 #13
<ole>

Man kan jo evt. fjerne en hel blok af elementer ad gangen - og erstatte den med en blok med nye elementer. Her er ELEMENT.cloneNode(true) rigtig god at kende.

Dog er der problemer med name-attributter i IE. Her skal formfelter oprettes på flg. måde:
    document.createElement("<input type='text' name='gnu'>");

Højst ureglementeret - men eneste løsning  :o(

/mvh
</bole>
Avatar billede showsource Seniormester
08. juni 2007 - 09:26 #14
Hvis i smider nogle svar, så kan der lukkes her

olebole, når du skriver "uregelmenteret", er det så fordi du bruger ' og ikke " ???
Avatar billede roenving Novice
08. juni 2007 - 12:26 #15
Nej, det er fordi createElement principielt opretter et navngivet element, f.eks. createElement("div") eller createElement("hr"), så det er selvfølgelig konceptuelt langt ude i hampen, at man skal skrive et fuldt html-tag, for at elementet kan få en name-attribut !-)
Avatar billede olebole Juniormester
08. juni 2007 - 13:40 #16
- og "Højst ureglementeret - men eneste løsning" er jo egentlig en modsigelse af udtalelesen før ... for man kan naturligvis bruge cloneNode og slippe udenom den uskønne syntaks  ;o)
Avatar billede jensgram Nybegynder
08. juni 2007 - 17:03 #17
Svar fra mig...
Avatar billede showsource Seniormester
09. juni 2007 - 13:00 #18
Er der ikke nogle flere som gerne vil svare?
Avatar billede olebole Juniormester
11. juni 2007 - 12:42 #19
- ikke for den smule ... men tak for tilbudet  ;o)
Avatar billede showsource Seniormester
12. juni 2007 - 01:56 #20
olebole, lidt har også ret! ( synes nu selv jeg fik noget info af dig som jeg kan bruge )
Og linket fra mrbonus er også point værd
Avatar billede olebole Juniormester
13. juni 2007 - 13:35 #21
Så et meget lille svar, da - men skær _kraftigt_ ned i point-antallet  ;o)
Avatar billede olebole Juniormester
15. juni 2007 - 12:10 #22
Tak for pointene  =)
Avatar billede jensgram Nybegynder
15. juni 2007 - 12:42 #23
Ditto
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