Avatar billede fuglen Nybegynder
24. februar 2009 - 14:49 Der er 5 kommentarer

checkbox som radiobutton

Ja... jeg ved godt at det kan klares med radiobuttons, men kunden insisterer: Det SKAL være checkboxes.

Jeg har en række checkboxes med samme navn, men der skal kun kunne vælges en af gangen, så når en checkes, skal andre med samme navn uncheckes, og det skal så også være muligt at unchecke den valgte som normalt med checkboxes.

Nogen ideer?
Avatar billede csvendsen Nybegynder
25. februar 2009 - 07:42 #1
Du skriver ikke om siden med CheckBokse er aspx ?
Jeg prøver at komme med et bud og eksempel i aspx:

Du har følgende CheckBokse i formen:

        <asp:CheckBox ID="CheckBox0" runat="server" />
        <asp:CheckBox ID="CheckBox1" runat="server" />
        <asp:CheckBox ID="CheckBox2" runat="server" />
        <asp:CheckBox ID="CheckBox3" runat="server" />
        <asp:CheckBox ID="CheckBox4" runat="server" />

I Page_Load event tilføjes event til de 5 Checkbokse:

    CheckBox0.Attributes.Add("onClick", "checkboxClick(this)")
    CheckBox1.Attributes.Add("onClick", "checkboxClick(this)")
    CheckBox2.Attributes.Add("onClick", "checkboxClick(this)")
    CheckBox3.Attributes.Add("onClick", "checkboxClick(this)")
    CheckBox4.Attributes.Add("onClick", "checkboxClick(this)")

I html Head på siden føjes denne linie:

<script type="text/javascript" src="javascript/TestPage.js">
</script>

Og her er JavaScriptet :

function checkboxClick(obj)
{
  try
  {
  // Hvis aktuel CheckBox ikke er afkrydset
  // behøver vi ikke at gøre noget.
  if (! obj.checked)
    return;
 
  // Antal CheckBokse i alt 
  var maxcb = 5; 
  // Nummer på den aktuelle CheckBox
  var nr = obj.id;
  nr = parseInt(right(nr,1),10);
 
  // Loop gennem alle Checkbokse og fjern afkrydsning
  // dog ikke den Checkbox som netop er krydset af
  for (var i = 0; i < maxcb; i++)
    {
    var checkbox = document.getElementById('CheckBox' + i);
    if (checkbox.checked && i !== nr)
      {
      checkbox.checked = 0;
      }
    }
  }
  catch(ex)
  {
  }
}

//-------------------------------------------------------
//Funktion som returner højre del af en streng.
//Variabel 'num' er antal karakterer

function right(str, num)
  {
  return str.substring(str.length - num);  // pull out right num
  }
Avatar billede olebole Juniormester
25. februar 2009 - 09:35 #2
<ole>

Hvis du er professionel, er det din opgave at forklare kunden, at det er 'no-go #1' at ændre på elementers forventede virkemåde - og at han skyder sig selv i foden. Hvis du har faglig troværdighed nok, vil han ikke være i tvivl  =)

/mvh
</bole>
Avatar billede fuglen Nybegynder
25. februar 2009 - 09:35 #3
Hej csvendsen

Det er sådan set bare java-delen jeg er interesseret i, men når du spør' så er det en god gammeldags asp-side formularen skal bruges på :) Men det burde ikke være den store omskrivning.

Hvordan vil dette script fungere, hvis der er flere formularer på samme side? Og for den sags skyld, hvis der er flere "grupper" af checkboxes i samme formular. I det tilfælde er det jo så kun de checkboxes med samme navn som den der afkrydses, der skal tages action på.
Avatar billede majbom Novice
25. februar 2009 - 14:26 #4
-> #0 - som ole skriver, er det ikke særlig brugervenligt at lave det med checkboxes, da brugeren ikke forventer at de virker som radiobuttons. desuden er det nemmere og hurtigere at løse det med "den rigtige" metode; radiobuttons.

en anden ting: java og javascript er to vidt forskellige ting.
Avatar billede csvendsen Nybegynder
25. februar 2009 - 17:53 #5
Helt enig, bør laves med radiobuttons.
Det var blot et eksempel på, at det kan laves i checkboxes, men det er jo som ole skriver, ikke det checkbox er beregnet til.
Nu ved jeg ikke om der i asp som i aspx også findes  checkboxlist, så kan det laves noget enklere og smartere end det forslag jeg kom med i starten, især hvis du har flere grupper af checkboxes. Men du må prøve at overbevise kunden...
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