Avatar billede mjall0w Nybegynder
13. juli 2003 - 12:03 Der er 21 kommentarer og
1 løsning

Checkbox med max 1 afkrydsning

Jeg har et par checkbox'e på min side.. Meeen det er sådan at man kan sætte kryds vel alle 5, hvordan kan man gøre så det max er 1 man kan sætte kryds ved ??
Avatar billede eagleeye Praktikant
13. juli 2003 - 12:13 #1
Et javascript eller som dette, eller brug radio-knapper som er til det formål:


<script>
function uncheckOther(theform, navn) {
  if (document.all || document.getElementById) {
    for (i = 0; i < theform.length; i++) {
      var tempobj = theform.elements[i];
      if (tempobj.type.toLowerCase() == "checkbox" && tempobj.checked == true && tempobj.name != navn)
        tempobj.checked = false;
    }
  }
}
</script>


<form action="" method="post">
<input type="checkbox" name="a" value="1" onclick="uncheckOther(this.form, this.name);"><br>
<input type="checkbox" name="b" value="2" onclick="uncheckOther(this.form, this.name);"><br>
<input type="checkbox" name="c" value="4" onclick="uncheckOther(this.form, this.name);"><br>
<input type="checkbox" name="d" value="5" onclick="uncheckOther(this.form, this.name);"><br>

<input type="submit" name="send" value="send">
</form>
Avatar billede roenving Novice
13. juli 2003 - 12:22 #2
Radios er som eagleeye skriver skabt til formålet, hvis de får samme name vil kun en kunne være afkrydset ...
Avatar billede mjall0w Nybegynder
13. juli 2003 - 12:53 #3
Takker for det eagleeye..
Har lige et spørgsmål til dig: bruger du hele dit liv på at sidde og svare på spm fra exp.dk ;) ?
Avatar billede eagleeye Praktikant
13. juli 2003 - 13:01 #4
;) Nej det gør jeg ikke, men når jeg har mulighed for det kigger jeg forbi, jeg eksvis kun på eksperten om aftenen i løbet af ugen. I går var jeg til Hov-drop hele dagen så der ar jeg ikke inde og kigge.
Avatar billede mjall0w Nybegynder
13. juli 2003 - 15:04 #5
function uncheckOther(theform, navn) {
skal jeg så erstatte (theform, navn) til = (minform) ??
Avatar billede eagleeye Praktikant
13. juli 2003 - 15:07 #6
Nej den finder selv formen i selv kaldet med this.form, giver formen til functionen og this.name giver navet på den checkbox som er trykket på.

uncheckOther(this.form, this.name);
Avatar billede mjall0w Nybegynder
13. juli 2003 - 15:49 #7
Hm der er bare et lille problem, det er at jeg kører den i en lykke..
Når jeg så klikker på boksene nedenunder fjernes krydset fra boksen ovenover..
Skal jeg prøve at lægge min kode ?
Avatar billede eagleeye Praktikant
13. juli 2003 - 16:19 #8
sådan er det lavet hvis du vikre at der kun er en så prøv at sætte denne function i stedet for den du har:

function uncheckOther(theform, navn) {
  var antalOn = 0;
  if (document.all || document.getElementById) {
    for (i = 0; i < theform.length; i++) {
      var tempobj = theform.elements[i];
      if (tempobj.type.toLowerCase() == "checkbox" && tempobj.checked == true)
        antalOn = antalOn + 1;
    }
  }
  if (antalOn>1) {
    navn.checked=false;
  }
}


og ret alle onclick:
uncheckOther(this.form, this.name);

Til:

uncheckOther(this.form, this);
Avatar billede mjall0w Nybegynder
13. juli 2003 - 16:27 #9
Microsoft VBScript compilation error '800a0408'

Invalid character

/test.asp, line 98


function uncheckOther(theform, navn) {
-------------------------------------^
Avatar billede mjall0w Nybegynder
13. juli 2003 - 17:10 #10
sry my bad.. Kom til at sætte <% istedet for <script>
Avatar billede mjall0w Nybegynder
14. juli 2003 - 20:01 #11
Hmm det er strange..
Den første virker slet ikke..
Jeg skulle slet ikke ændre noget i <script> koderne vel ??
Som feks at skrive formnavnet ind ?
Avatar billede roenving Novice
14. juli 2003 - 22:02 #12
Den virker da upåklageligt:
<script>
function uncheckOther(theform, navn) {
  var antalOn = 0;
  if (document.all || document.getElementById) {
    for (i = 0; i < theform.length; i++) {
      var tempobj = theform.elements[i];
      if (tempobj.type.toLowerCase() == "checkbox" && tempobj.checked == true)
        antalOn = antalOn + 1;
    }
  }
  if (antalOn>1) {
    navn.checked=false;
  }
}
</script>
<form action="" method="post">
<input type="checkbox" name="a" value="1" onclick="uncheckOther(this.form, this);"><br>
<input type="checkbox" name="b" value="2" onclick="uncheckOther(this.form, this);"><br>
<input type="checkbox" name="c" value="4" onclick="uncheckOther(this.form, this);"><br>
<input type="checkbox" name="d" value="5" onclick="uncheckOther(this.form, this);"><br>
<input type="submit" name="send" value="send">
</form>
Avatar billede mjall0w Nybegynder
15. juli 2003 - 00:01 #13
Hmm ikke ved mig..
Kan det være fordi jeg udskriver checkbox'ene i et loop ?
Avatar billede roenving Novice
15. juli 2003 - 00:03 #14
Ser resultatet af din kode sådan ud ?-)
Avatar billede mjall0w Nybegynder
15. juli 2003 - 00:15 #15
Den ser sådan her ud:

  <td align="left" height="18" width="6%">
<script>
function uncheckOther(theform, navn) {
  if (document.all || document.getElementById) {
    for (i = 0; i < theform.length; i++) {
      var tempobj = theform.elements[i];
      if (tempobj.type.toLowerCase() == "checkbox" && tempobj.checked == true && tempobj.name != navn)
        tempobj.checked = false;
    }
  }
}
</script>

        <% if rs("rank") = "CL" then %>
    <input type="hidden" name="id" value="<%=rs("id")%>">
        <input type='checkbox' name='Rank' value='CL' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"" checked disabled>
        <% else %>
        <input type='checkbox' name='Rank' value='CL' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"">
        <% end if %>
      </td>
      <td align="left" height="18" width="8%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
      <% if rs("rank") = "Member" then %>
        <input type='checkbox' name='Rank' value='Member' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"" checked>
        <% else %>
        <input type='checkbox' name='Rank' value='Member' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"">
        <% end if %>
        </font></td>
      <td align="left" height="18" width="10%">
        <input type='checkbox' name='Rank' value='WA' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"">
      </td>
      <td align="left" height="18" width="10%">
        <input type='checkbox' name='Rank' value='Manager' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"">
      </td>
      <td align="left" height="18" width="26%">
        <input type='checkbox' name='Rank' value='Webmaster' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"">
      </td>
    </tr>
  </table>
  <font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><font size="1">
  <%
 
 
 
      Rs.MoveNext
        Wend %>
  </font></font>
  <p>&nbsp;
    <input type="submit" name="Updater" value="Update" class=mitfelt>
  </p>

G'nat og goferie, hopper iseng nu er lidt træt ;)
Avatar billede roenving Novice
15. juli 2003 - 00:19 #16
Du har jo ikke sat den ny funktion ind ?-)

Men du har også en grov fejl i dit kald til funktionen:

onclick="onclick="uncheckOther(this.form, this.name);""

er jo indlysende fejl, sådan her i stedet:

onclick="uncheckOther(this.form, this.name);"
Avatar billede roenving Novice
15. juli 2003 - 00:22 #17
At jeg så ikke til checkboxes ville vælge det samme navn, men finde en måde, så de kunne få forskellige navne, ville ikke have nogen betydning med den ny funktion, men med den gamle betyder det alt! da der jo checkes op imod navnet ...

Altså: brug den ny funktion og få rettet funktionskaldet !-)
Avatar billede roenving Novice
15. juli 2003 - 00:50 #18
Altså sådan (og jeg har kun checket javascript/html-koden, da det er der min ekspertise er ,-)

  <td align="left" height="18" width="6%">
<script>
function uncheckOther(theform, navn) {
  var antalOn = 0;
  if (document.all || document.getElementById) {
    for (i = 0; i < theform.length; i++) {
      var tempobj = theform.elements[i];
      if (tempobj.type.toLowerCase() == "checkbox" && tempobj.checked == true)
        antalOn = antalOn + 1;
    }
  }
  if (antalOn>1) {
    navn.checked=false;
  }
}
</script>

        <% if rs("rank") = "CL" then %>
    <input type="hidden" name="id" value="<%=rs("id")%>">
        <input type='checkbox' name='Rank' value='CL' class=mitfelt onclick="onclick="uncheckOther(this.form, this.name);"" checked disabled>
        <% else %>
        <input type='checkbox' name='Rank' value='CL' class=mitfelt onclick="uncheckOther(this.form, this);">
        <% end if %>
      </td>
      <td align="left" height="18" width="8%"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
      <% if rs("rank") = "Member" then %>
        <input type='checkbox' name='Rank' value='Member' class=mitfelt onclick="uncheckOther(this.form, this);" checked>
        <% else %>
        <input type='checkbox' name='Rank' value='Member' class=mitfelt onclick="uncheckOther(this.form, this);">
        <% end if %>
        </font></td>
      <td align="left" height="18" width="10%">
        <input type='checkbox' name='Rank' value='WA' class=mitfelt onclick="uncheckOther(this.form, this);">
      </td>
      <td align="left" height="18" width="10%">
        <input type='checkbox' name='Rank' value='Manager' class=mitfelt onclick="uncheckOther(this.form, this);">
      </td>
      <td align="left" height="18" width="26%">
        <input type='checkbox' name='Rank' value='Webmaster' class=mitfelt onclick="uncheckOther(this.form, this);">
      </td>
    </tr>
  </table>
  <font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><font size="1">
  <%
 
 
 
      Rs.MoveNext
        Wend %>
  </font></font>
  <p>&nbsp;
    <input type="submit" name="Updater" value="Update" class=mitfelt>
  </p>

PS. jeg ville vælge at lægge javascript-funktioner udenfor den almindelige kode for nemmere at kunne skille det ad, men det skulle ikke spille nogen rolle i funktionaliteten !-)
Avatar billede roenving Novice
15. juli 2003 - 00:51 #19
-- og jeg overså den første:

        <% if rs("rank") = "CL" then %>
    <input type="hidden" name="id" value="<%=rs("id")%>">
        <input type='checkbox' name='Rank' value='CL' class=mitfelt onclick="uncheckOther(this.form, this);" checked disabled>
        <% else %>
Avatar billede mjall0w Nybegynder
15. juli 2003 - 09:37 #20
hehe okay, altså min script kode den står også længere oppe tog den bare ikke med fordi så var min db connection med pass kommet med..  :)
Men det virker stadig ikke.. Når jeg bruger det du lige har skrevet fravælger den bare alle dem som den har krydset af sig selv..

Og det med at give den anderledes navnet har jeg prøvet på med radio buttoms..

<input type='radio' name='Rank<%=rs("id"=' value='Webmaster' class=mitfelt>

Men senere nede i min form skal jeg have skrevet det ind i en database som ser således ud:

nItems = Request.Form("id").Count
if (nItems >= 1) then
  'Henter værdien fra sidste side
  For i = 1 To nItems
  // strSQL = "DELETE FROM MSG WHERE ID="&Request.Form("slet")(i)
    strSQL = "UPDATE clanmedlem SET Rank=" & request.form("rank") & " WHERE ID="&Request.Form("id")(i)
    'strSQL = "UPDATE MSG SET se="&false(i)&" WHERE ID="&Request.Form("slet")(i)

    Conn.Execute(strSQL)
  Next
Conn.Close

Men så er problemet at jeg ikke ved hvordan i hele hule jeg skal kunne ID'et ind i Request.Form("rankIDskulleståder")
Avatar billede roenving Novice
15. juli 2003 - 13:13 #21
Den nye funktion afviser bare at du krydser flere af ...

Du kan forsøge lige så tosset du vil, men har du først krydset een af kan du ikke afkrydse andre (indenfor samme form !-) før du har fjernet afkrydsningen fra den ...

-- måske en opdeling i nogle forskellige forme er nødvendigt -- nej, den kan jeg ik' li'e gennemskue ...
Avatar billede mjall0w Nybegynder
15. juli 2003 - 15:15 #22
Hm øv bøv..
Har også snart prøvet 2 dage på den tror snart jeg opgiver at lave det på den måde..
Tror jeg vil lave det på en anden måde sådan at man klikker på ham man gerne vil rette og op kommer et nyt java vindue hvor man så kan gøre det for kun EN enkelt og ikke for alle..

Men ellers mange tak for hjælpe :)

Og ha' en go ferie (3 gang) :)
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
Kurser inden for grundlæggende programmering

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