Avatar billede likedon Nybegynder
17. januar 2005 - 13:33 Der er 11 kommentarer og
1 løsning

ignorere start på felt

Jeg har følgende funktion:
    for (var i=0;i<<%=antal%>;i++) {
        if (eval("document.form1.q" + i + "[0].checked") == true)
            no++;
        if (eval("document.form1.q" + i + "[1].checked") == true)
            yes++;
    }

den bruges til at tælle form sammen.
problemet opstår nu ved at jeg gerne vil have mine felter til at hedde:
aa_q0
ab_q1
ac_q2
osv.
grunden er at jeg bruger de første 2 tegn til at sortere efter i en mail send funktion.

er der nogen der kan skrive funktionen om så det fungere?
Avatar billede olebole Juniormester
17. januar 2005 - 17:17 #1
<ole>

Umiddelbart virker det ikke som en synderlig optimal måde at løse opgaven på, men det er svært at vide uden at kunne se koden. Brugen af eval er i det viste eksempel helt unødvendig ... og eval er gabende langsom og ineffektiv:

for (var i=0;i<<%=antal%>;i++) {
    if (document.form1["q" + i + "0"].checked == true) no++;
    if (document.form1["q" + i + "1"].checked == true) yes++;
}

Resten af det, du beder om, lyder yderst usmart ... der må være en bedre måde at løse det på  :)

/mvh
</bole>
Avatar billede likedon Nybegynder
17. januar 2005 - 18:06 #2
Ja usmart det kan da godt være, men jeg har et script som løber gennem en given formular og sender en mail, og det fungere upåklageligt. Det skal jeg så koble sammen med overstående, så jeg kan få det med i formularen. Problemet er at den er sat op til at lede efter xx_ ved feltnavnene så den kan sortere, er der ikke noget xx_ så bliver de ikke medtaget i formularen til email.

siden det er på er her: http://www.mitcms.dk/eksterne/dmmd/default.asp?id=173

jeg er da åben overfor andre løsninger.

men jeg skal sådan set bare have den til at kunne tælle radioknapperne sammen selv om de kommer til at hedde ba_q0, bb_q1 osv.


funktionen jeg bruger til at løbe formen igennem er følgende:

function sortArray(arrIn)
    for n = 0 to Ubound(arrIn)
        lastValue = "¤¤¤¤¤"
        for i = 0 to Ubound(arrIn)
            if not lastValue = "¤¤¤¤¤" then
                thisValue = arrIn(i)
                if lastValue > thisValue then
                    arrIn(i) = lastValue
                    arrIn(i-1) = thisValue
                end if
            end if
            lastValue = arrIn(i)
        next
    next
    sortArray = arrIn
end function

if request("send")="ja" then
if Request.Form <> "" then
    Redim Preserve ArrUnsorted(-1)
    for each Item in Request.Form
if Item<>"modtager_email" and Item<>"send_tekst" and Item<>"server_email" and Item<>"emne_email" and Item<>"sender_email" and Item<>"send" and Item<>"" then
        if Instr(1, Item, "_") > 1 then
            Redim Preserve ArrUnsorted(Ubound(ArrUnsorted)+1)
            ArrUnsorted(Ubound(ArrUnsorted)) = Item
        end if
end if       
    next
    ArrSorted = sortArray(ArrUnsorted)
 
end if


for i = 0 to Ubound(ArrSorted)
mtextz = mtextz & Split(ArrSorted(i), "_")(1) & ": " & Request.Form(ArrSorted(i)) & "<br>"
Next
Avatar billede roenving Novice
17. januar 2005 - 18:17 #3
Så måske i stedet:

var e = document.form1.elements;
for(i=0;e.length>i;i++){
  if(e[i].type=="checkbox"&&e[i].name.indexOf("_q")==2){
    if(e[i].name.match(/0$/))
      no++;
    else
      yes++;
  }
}
Avatar billede likedon Nybegynder
17. januar 2005 - 18:25 #4
type=radio men ok den må jeg jo prøve det bliver dog først senere i aften
Avatar billede olebole Juniormester
17. januar 2005 - 18:28 #5
Joohhh ... men ville det ikke være mere logisk at tælle dem sammen, serverside. Man ved vel, hvormange radios, der bliver skrevet i dokumentet - og kun de radios, der er checked er 'successfull' ... og kan derfor findes på serveren.
Så er 'yes' altså lig med antallet af radios, der er tilgængelige på serveren - og 'no' er det samlede antal af radios minus 'yes'. Det andet virker lidt som overkill  :)

Derudover ville det nok være formålstjenligt at rydde op i koden. Det virker ikke overbevisende, at 'Danish MultiMedia Designers ApS' har en side, bestående af tusse-gammelt HTML - krydret med en god del deciderede HTML-fejl  ;o)
Avatar billede likedon Nybegynder
17. januar 2005 - 18:33 #6
yes rydes op skal der, er også kun ved at overtage den.
ovenståen var jo for at slippe nemmes om ved det, ved serverside skal jeg jo til at poste tilbage, det behøvede jeg ikke ved javaS så de i øvrig allerede havde, så ville bare rette denne til. Men jow det kan da godt være det hele ender på asp'en
Avatar billede roenving Novice
17. januar 2005 - 18:40 #7
Hvis man skulle bruge javascript til noget, kunne det f.eks. være at opdatere on-the-fly, f.eks.

<input type="radio" name="aa_q10" onclick="taelJaNej(this);">
<input type="radio" name="ab_q11" onclick="taelJaNej(this);" checked="true">

function taelJaNej(fld){
  var f = fld.form;
  if(fld.name.match(/0$/)){
    f.IaltJa.value = +f.IaltJa.value-1;
  else
    f.IaltNej.value = +f.IaltNej.value+1;
}
Avatar billede likedon Nybegynder
17. januar 2005 - 18:57 #8
det gør siden også nederst, den tæller ja'er og nej'er og viser hvor mange af hver der er sat "kryds" i
Avatar billede likedon Nybegynder
17. januar 2005 - 19:46 #9
dropper forsøget med at fange formen automatisk og laver den manuel, den der vil have pt kan smide et svar
Avatar billede roenving Novice
18. januar 2005 - 00:02 #10
Hrm, der var vist også et par enkelte huller mellem fejlene ...

Men f.eks.

<script type="text/javascript">
function taelJaNej(fld){
  var f = fld.form;
  if(fld.name.match(/1$/)){
    f.IaltJa.value = +f.IaltJa.value-1;
    f.IaltNej.value = +f.IaltNej.value+1;
    f.elements[fld.name.replace(/^(.)b_q(\d)1$/,"$1a_q$20")].checked = false;
  }else{
    f.IaltJa.value = +f.IaltJa.value+1;
    f.IaltNej.value = +f.IaltNej.value-1;
    f.elements[fld.name.replace(/^(.)a_q(\d)0$/,"$1b_q$21")].checked = false;
  }
}
</script>

<form>
<table>
  <tr>
    <td>Spørgsmål</td>
    <td>Ja</td>
    <td>Nej</td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q00" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q01" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q10" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q11" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q20" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q21" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q30" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q31" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q40" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q41" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q50" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q51" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Virker din hjemmeside ordentligt</td>
    <td><input type="radio" name="aa_q60" onclick="taelJaNej(this);"></td>
    <td><input type="radio" name="ab_q61" onclick="taelJaNej(this);" checked="true"></td>
  </tr>
  <tr>
    <td>Ialt</td>
    <td><input type="text" name="IaltJa" size="2" value="0"></td>
    <td><input type="text" name="IaltNej" size="2" value="7"></td>
  </tr>
</table>
</form>
Avatar billede likedon Nybegynder
18. januar 2005 - 09:14 #11
som sagt jeg har opgivet at lave den automatisk og fanger nu felterne specifikt. Det var ikke værd at bruge mere tid på rent omkostningsmæssigt.

men tak for de gode ideer
Avatar billede likedon Nybegynder
28. januar 2005 - 16:33 #12
når i ikke vil have noget for jeres tid tager jeg dem selv
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