Avatar billede langthjem Nybegynder
15. januar 2007 - 15:13 Der er 13 kommentarer og
1 løsning

Dynamisk SELECT bliver ikke sendt

Hej dudes and dudettes!

Jeg har følgende script som opretter en SELECT-box, og derefter knytter den til en DIV i en FORM.

function ColorSelect(sFieldName) {
    objSelect = document.createElement('select');
    objSelect.setAttribute('name',sFieldName);
    objSelect.setAttribute('id',sFieldName);
    objSelect.className = 'Visible';

    objOption = document.createElement('option');
    objOption.setAttribute('value','0');
    objOption.innerHTML = 'Alle farver';
    objSelect.appendChild(objOption);

    <%
    If bColor Then
        For i = 0 To Ubound(rsColor,2)
            Response.Write "objOption = document.createElement('option');" & vbCrLf
            Response.Write "objOption.setAttribute('value','" & rsColor(0,i) & "');" & vbCrLf
            Response.Write "objOption.innerHTML = '" & rsColor(1,i) & "';" & vbCrLf
            Response.Write "objSelect.appendChild(objOption);" & vbCrLf
        Next
    End If
    %>

    return objSelect;
}

og derefter knytter den til en DIV object med objDIV.appendChild(ColorSelect('MyColor')).

Nu er problemet så bare; scriptet laver rigtignok en SELECT det rigtige sted, med de rigtige værdier, men når jeg sender formularen kommer SELECT-boxen ikke med i resultatet. Hvad går der galt?
Avatar billede phliplip Nybegynder
15. januar 2007 - 15:31 #1
Du må have en fejl i dit serverside script.. der er ingen fejl i ovenstående !-) He
Avatar billede erikjacobsen Ekspert
15. januar 2007 - 15:32 #2
Bliver den knyttet til et FORM-element?
Avatar billede langthjem Nybegynder
15. januar 2007 - 15:36 #3
Har fundet ud af at det er disse linier som "fejler" i IE:

objSelect.setAttribute('name',sFieldName);
objSelect.setAttribute('id',sFieldName);

Har forsøgt med:

objSelect.name = sFieldName;
objSelect.id = sFieldName;

Men det virker heller ikke. Nogen nye idéer?
Avatar billede langthjem Nybegynder
15. januar 2007 - 15:37 #4
I den samme funktion som kalder ColorSelect() bliver der ligeledes lavet nogle INPUT felter (dog indsat som innerHTML), og de bliver sendt korrekt.
Avatar billede erikjacobsen Ekspert
15. januar 2007 - 15:46 #5
Nej, umiddelbart er der ikke noget galt. Et minieksempel, hvor man kan se selectboxen i URL-en efter tryk på knappen:

<html>
<head>
<title> Title </title>
</head>

<body>
<FORM METHOD="get" id="f">

<input type="submit">



</FORM>


<script type="text/javascript">
function ColorSelect(sFieldName) {
    objSelect = document.createElement('select');
    objSelect.setAttribute('name',sFieldName);
    objSelect.setAttribute('id',sFieldName);
    objSelect.className = 'Visible';

    objOption = document.createElement('option');
    objOption.setAttribute('value','0');
    objOption.innerHTML = 'Alle farver';
    objSelect.appendChild(objOption);

    objOption = document.createElement('option');
    objOption.setAttribute('value','1');
    objOption.innerHTML = 'gul';
    objSelect.appendChild(objOption);

    return objSelect;
}

document.getElementById("f").appendChild(ColorSelect('MyColor'));
</script>
</body>
</html>
Avatar billede langthjem Nybegynder
15. januar 2007 - 16:24 #6
Du har ret Erik, men problemet er at det ikke er muligt for mig at lave en appendChild() direkte på formen, da det vil sætte mit felt ind nederst på siden (hvilket ikke er hensigtsmæssigt her), så det er ikke en mulighed.
Avatar billede langthjem Nybegynder
15. januar 2007 - 18:31 #7
Har lavet funktionen om til:

function ColorSelect(sFieldName) {
    sSelect = '';
    sSelect += '<select name="' + sFieldName + '">';
        sSelect += '<option value="0">Alle farver</option>';
        <%
        If bColor Then
            For i = 0 To Ubound(rsColor,2)
                Response.Write "sSelect += '<option value=""" & rsColor(0,i) & """>" & rsColor(1,i) & "</option>';" & vbCrLf
            Next
        End If
        %>
    sSelect += '</select>';

    return sSelect;
}

Det virker. Lukker spørgsmålet.
Avatar billede erikjacobsen Ekspert
15. januar 2007 - 18:52 #8
Man kan tilføje elementer mellem formens elementer - det behøver ikke være tilsidst med appendChild.
Avatar billede langthjem Nybegynder
15. januar 2007 - 19:25 #9
Det kræver jo en hel anden tilgang, så skal jeg til at tælle elementer. Desuden tror jeg ikke det vil ændre en hel masse. Det viser sig nemlig at mit tidligere script satte resultatet rigtigt ind i DOM'en (ifølge IE DevToolBar's DOM-Inspector), men det fangede FORM elementet bare ikke.
Avatar billede langthjem Nybegynder
15. januar 2007 - 19:26 #10
Nå ja, og scriptet virkede fint i Firefox.
Avatar billede olebole Juniormester
16. januar 2007 - 14:46 #11
<ole>

Årsagen ligger gemt et andet sted: IE's dårlige håndtering af bl.a. name-attributten ved DOM-operationer:
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp

Du kan f.eks. ikke i IE skrive:
    var o = document.createElement("input");
    o.setAttribute("type", "text");
    o.setAttribute("name", "ulrik");
    ELEMENT.appendChild(o);

Du skal i stedet skrive:
    var o = document.createElement("<input type='text' name='ulrik'>");
    ELEMENT.appendChild(o);

Gør du ikke som vist i andet eksempel, bliver name-attributten ikke sat, hvorfor elementet ikke vil figurere på serveren som request-variabel  ;o)

Du kan evt. teste de to metoder og spørge på parent-elementets innerHTML efetr, du har sat elementet ind. Så vil du se, det indsatte element ikke har en name-attribut

/mvh
</bole>
Avatar billede langthjem Nybegynder
16. januar 2007 - 18:52 #12
Ok, jeg anede ikke at man kunne bruge en HTML attribut i en createElement(), tak for det. Skal du ha' point? For så må jeg jo lige lave et point indlæg.
Avatar billede olebole Juniormester
17. januar 2007 - 15:18 #13
Nej, ellers tak ... jeg har rigeligt  ;o)

IE-syntaksen er absolut ikke valid, så det er ikke én, du kan bruge i stedet for den, du ellers bruger. Man bør diskriminere mellem browserne - og _kun_ server IE-syntaksen for IE  =)
Avatar billede langthjem Nybegynder
17. januar 2007 - 16:39 #14
Ok, det er hermed noteret. Tak for hjælpen.
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