Avatar billede wwwbolig Nybegynder
30. maj 2002 - 17:06 Der er 7 kommentarer og
2 løsninger

Opsamle vædier fra form

Hej

Jeg har tidligere fået hjælp til at lave et JS der opsamler værdier fra text-input i en form og returnere dem i en XML streng. Dette script har jeg nu selv forsøgt at udvide så det kan opsamle vædier fra checkbox, radio, textarea og dropdown, men det går desværre ikke helt :-(

Ved opsamling af værdier fra flere Radiobuttons med samme navn, skal den kun returnere den der er valgt.

eksempel: <input1>værdi 1</input>

Ved opsamling af værdier fra flere Checkboxe med samme navn skal den returnere det sådan her:

eksempel: <input2>værdi 1,værdi 2</input2>

Ved de øvrige inputs skal det returneres <input>værdi</input>

Håber der er nogen der kan hjælpe:

SCRIPT:
*********************************************

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>JS</title>
<script type='text/javascript'>
function LavXMLstreng( frm ) {
    var frme = frm.elements;
    var res = "";
    for ( var i=0; i<frme.length; i++ ) {
        if (  frme[i].type == "text" || frme[i].type == "radio" || frme[i].type == "checkbox" )
        {
            res += "<"+frme[i].name+">"+frme[i].value+"</"+frme[i].name+">";
        }
    }
    alert(res);
};
</script>
</head>
<body>
<form name="form1" onsubmit="LavXMLstreng(this);return true;">
<input type="radio" name="input1" value="1"><input type="radio" name="input1" value="2">
<input type="checkbox" name="input2" value="4"><input type="checkbox" name="inpu2" value="6">
<input type="text" name="input3">
<input type="text" name="input4">
<input type="text" name="input5">
<textarea cols="2" rows="2" name="input6"></textarea>
<select name="input7">
    <option value="1">Værdi 1</option>
    <option value="2">Værdi 2</option>
</select>
<input type="submit" name="Send" value="Send">
</form>
</body>
</html>
Avatar billede jespernaur Nybegynder
30. maj 2002 - 19:49 #1
Prøv følgende

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>JS</title>
<script type='text/javascript'>
function LavXMLstreng( frm ) {
    var frme = frm.elements;
    var res = "";

    var cb = new Array(); // Indexed by checkbox name,
                          // used for collecting checkbox values

    for ( var i=0; i<frme.length; i++ ) {
        if (frme[i].type == "text")
        {
            res += "<"+frme[i].name+">"+frme[i].value+"</"+frme[i].name+">";
        }
        else if (frme[i].type == "radio")
        {
            if (frme[i].checked)
            {
                res += "<"+frme[i].name+">"+frme[i].value+"</"+frme[i].name+">";
            }
        }
        else if (frme[i].type == "checkbox")
        {
            if (frme[i].checked)
            {
                if (!cb[frme[i].name])
                {
                    // first occurrence of name
                    cb[frme[i].name] = frme[i].value;
                }
                else
                {
                    // second or further occurrence of name
                    cb[frme[i].name] += ',' + frme[i].value;
                }
            }
        }
    }
    for (name in cb)
    {
        res += "<"+name+">"+cb[name]+"</"+name+">";
    }
    alert(res);
};
</script>
</head>
<body>
<form name="form1" onsubmit="LavXMLstreng(this);return true;">
<input type="radio" name="input1" value="1">
<input type="radio" name="input1" value="2">
<input type="checkbox" name="input2" value="4">
<input type="text" name="input3">
<input type="checkbox" name="input2" value="6">
<input type="text" name="input4">
<input type="text" name="input5">
<textarea cols="2" rows="2" name="input6"></textarea>
<select name="input7">
    <option value="1">Værdi 1</option>
    <option value="2">Værdi 2</option>
</select>
<input type="submit" name="Send" value="Send">
</form>
</body>
</html>


Mvh
Jesper Naur
Avatar billede jakoba Nybegynder
30. maj 2002 - 21:54 #2
Det er ukorrekt at give samme navn til 2 eller flere felter eller checkbokse. kun radioknapper må 'deles om eet navn'.
Avatar billede jespernaur Nybegynder
30. maj 2002 - 22:19 #3
jakoba>> det har du faktisk ikke ret i, se fx her fra de officielle standarder:


http://www.w3.org/TR/html4/interact/forms.html#checkbox

hvorfra jeg citerer:

checkboxes
Checkboxes (and radio buttons) are on/off switches that may be toggled by the user. A switch is "on" when the control element's checked attribute is set. When a form is submitted, only "on" checkbox controls can become successful.
>>>Several checkboxes in a form may share the same control name<<<. Thus, for example, checkboxes allow users to select several values for the same property. The INPUT element is used to create a checkbox control.

(undertegnedes fremhævning >>>...<<<)

Mvh
Jesper Naur
Avatar billede atn Nybegynder
30. maj 2002 - 22:53 #4
Hejsa !

Prøv denne....

Jacoba >> Det kunne da godt være at man ville checke flere muligheder i en katagori...og samle dem under samme navn...

Venligst

<ATN/>

************| Code Begin |************

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>JS</title>
    <script type='text/javascript'>
    function LavXMLstreng(frm) {
        var frme = frm.elements;
        var res = "";
        for (var i = 0; i < frme.length; i++) {
            switch (frme[i].type) {
                case "text":
                    res += "<"+ frme[i].name +">"+ frme[i].value +"</"+ frme[i].name +">";
                    break;
                case "checkbox":
                    if (res.indexOf(frme[i].name) < 0) {
                        res += '<'+ frme[i].name +'>';
                        for (var n = 0; n < frm[frme[i].name].length; n++ ) {
                            res += frm[frme[i].name][n].value;
                            if (n != (frm[frme[i].name].length - 1)) {
                                res += ',';
                            }                   
                        }
                        res += '</'+ frme[i].name +'>';
                    }
                    break;
                case "radio":
                    if (res.indexOf(frme[i].name) < 0) {
                        res += '<'+ frme[i].name +'>';
                        for (var n = 0; n < frm[frme[i].name].length; n++ ) {
                            if (frm[frme[i].name][n].checked) {
                                res += frm[frme[i].name][n].value;
                            }
                        }
                        res += '</'+ frme[i].name +'>';
                    }
                    break;
                case "textarea":
                    res += "<"+ frme[i].name +">"+ frme[i].value +"</"+ frme[i].name +">";
                    break;
                default:
                    break;
            }
        }
        alert(res);
        return false;
    }
    </script>
</head>
<body>
<form name="form1" onsubmit="return LavXMLstreng(this);">
<input type="radio" name="input1" value="1">
<input type="radio" name="input1" value="2">
<input type="checkbox" name="input2" value="4">
<input type="checkbox" name="input2" value="6">
<input type="checkbox" name="input2" value="6">
<input type="text" name="input3">
<input type="text" name="input4">
<input type="checkbox" name="input2" value="6">
<input type="radio" name="input1" value="3">
<input type="text" name="input5">
<textarea cols="2" rows="2" name="input6"></textarea>
<select name="input7">
    <option value="1">Værdi 1</option>
    <option value="2">Værdi 2</option>
</select>
<input type="submit" name="Send" value="Send">
</form>
</body>
</html>
Avatar billede atn Nybegynder
30. maj 2002 - 22:56 #5
Jesper >> Mente det nok... rart at få det stadfæstet  §:o)

venligst

<ATN/>
Avatar billede wwwbolig Nybegynder
31. maj 2002 - 08:16 #6
atn>> Tak for hjælpen, men det er stadig nogle små problemer - den opsamler værdier fra alle checkboxen også selv om de ikke er checked og hvordan for jeg <SELECT>'en med i opsamlingen?
Avatar billede atn Nybegynder
31. maj 2002 - 10:34 #7
Heysa !

Lad mig først lige sige at det første eksempel Jesper lavede køre perfect...der er nogle småfejl i den jeg lavede først...

Meeeen...jeg synes nu det er en interesant ting/idé du har fået der så jeg har lavet den helt færdig...ved jo aldrig om det er noget man en dag kan bruge ! :o)

Venligst

<ATN/>

Her kommer det..... §:o)

********| Code Start |*********
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>JS</title>
    <script type='text/javascript'>
    function LavXMLstreng(frm) {
        var frme = frm.elements;
        var res = "";
        for (var i = 0; i < frme.length; i++) {
            switch (frme[i].type) {
                case "text":
                    if (frme[i].value != '') {
                        res += "<"+ frme[i].name +">"+ frme[i].value +"</"+ frme[i].name +">";
                    }
                    break;
                case "checkbox":
                    if ((res.indexOf(frme[i].name) < 0) && (frme[i].checked)) {
                        tmp = '';
                        res += '<'+ frme[i].name +'>';
                        for (var n = 0; n < frm[frme[i].name].length; n++ ) {
                            if (frm[frme[i].name][n].checked) {
                                tmp += frm[frme[i].name][n].value +',';
                            }           
                        }
                        res += tmp.substring(0,tmp.length - 1);
                        res += '</'+ frme[i].name +'>';
                    }
                    break;
                case "radio":
                    if ((res.indexOf(frme[i].name) < 0) && (frme[i].checked)) {
                        res += '<'+ frme[i].name +'>';
                        res += frme[i].value;
                        res += '</'+ frme[i].name +'>';
                    }
                    break;
                case "textarea":
                    if (frme[i].value != '') {
                        res += "<"+ frme[i].name +">"+ frme[i].value +"</"+ frme[i].name +">";
                    }
                    break;
                default:
                    if (frm[frme[i].name].length && typeof frm[frme[i].name].type == 'string') {
                        if (frm[frme[i].name].options[frme[i].selectedIndex].value >= 0) {
                            res += "<"+ frme[i].name +">"+ frme[i].value +"</"+ frme[i].name +">";
                        }
                    }
                    break;
            }
        }
        if (res != '') {
            alert(res);
            return true;
        } else {
            alert('Der er ikke valgt noget i formen...');       
            return false;
        }
    }
    </script>
</head>
<body>
<form name="form1" onsubmit="return LavXMLstreng(this);">
<input type="radio" name="input1" value="1">
<input type="radio" name="input1" value="2"><br>
<input type="radio" name="input9" value="1">
<input type="radio" name="input9" value="2"><br>
<input type="checkbox" name="input8" value="4">
<input type="checkbox" name="input2" value="6">
<input type="checkbox" name="input2" value="6">
<input type="checkbox" name="input2" value="6">
<input type="checkbox" name="input8" value="6"><br>
<input type="text" name="input3"><br>
<input type="text" name="input4"><br>
<input type="checkbox" name="input2" value="6"><br>
<input type="radio" name="input1" value="3"><br>
<input type="text" name="input5"><br>
<textarea cols="2" rows="2" name="input6"></textarea><br>
<select name="input7">
    <option value="-1">Vælg her...</option>
    <option value="0">Værdi 0</option>
    <option value="1">Værdi 1</option>
    <option value="2">Værdi 2</option>
</select><br>
<input type="submit" name="Send" value="Send">
</form>
</body>
</html>
Avatar billede wwwbolig Nybegynder
31. maj 2002 - 10:54 #8
atn >> tak for hjælpen :-) 

Jeg havde slet ikke set at det var Jesper der havde svaret første gang, troede det var dig begge gange - så jeg deler points mellem jer.

Hvis du er interessert, så bruger jeg opsamlingen til at returnere en XML streng til en .NET Web Service.
Avatar billede atn Nybegynder
31. maj 2002 - 10:58 #9
Okay....det lyder spændende....jeg har ikke haft lejlighed til at kigge på .NET og webservises endnu....men det kan ikke vare længe...jeg er ved at sætte det op hjemme....

Held og lykke med det...

Venligst

<ATN/>
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