Avatar billede zulaff Nybegynder
30. november 2009 - 22:34 Der er 3 kommentarer og
1 løsning

Find selected value i radiobuttonlist med javascript på en asp.net side

Hej. Jeg har lidt problemer med at finde ud af hvilken radiobutton der valgt, med et javascript. Har fundet en masse løsninger med google, men jeg kan ikke få dem til at virke. Situationen er at jeg skal have en radiobuttonlist enabled, hvis den korrekte radiobutton er valgit i en anden radiobuttonlist.

Jeg har fundet ud af hvordan jeg enabler min radiobuttonlist, med et onChanged kald, men jeg kan ikke finde ud af hvilken radiobutton der er valgt. Jeg har lavet en custom control udgave af Radiobuttonlist, men til dette formål skulle der ikke være nogen forskel.

Her er min kode:

<custom:ExtRadioButtonList ID="opsparingsFormVælger" TextKey="EkstraIndbetalingerOpsparingsformVælger"
                        runat="server">
                        <asp:ListItem Value="AA"></asp:ListItem>
                        <asp:ListItem Value="BB"></asp:ListItem>
                        <asp:ListItem Value="CC"></asp:ListItem>
                    </custom:ExtRadioButtonList>

<custom:ExtRadioButtonList ID="bfdVælger" TextKey="EkstraIndbetalingerBfdVælger" runat="server" Enabled="false">
                        <asp:ListItem Value="True" />
                        <asp:ListItem Value="False" Selected="True"/>
                    </custom:ExtRadioButtonList>

Mine Javascript funktion(er) ser således ud:
function visBfdVælger(control)
    {
      var controlObject = document.getElementById('<%= bfdVælger.ClientID %>');
      controlObject.removeAttribute('disabled')
      RecursiveDisable(controlObject);
      alert(GetVal(control));
      return false;
    }


    function RecursiveDisable(control)
    {
        var children = control.childNodes;
        try{control.removeAttribute('disabled')}
        catch(ex){}
        for (var j = 0; j < children.length; j++)
        {
            RecursiveDisable(children[j]);
        }
    }
   
    function GetVal(control)
    {
        var a = "dd";
        var children = control.childNodes;

        for (var i=0; i < children.length; i++)
        {
            //a = a + "Test";
           
            if (children[i].checked)
            {
                a = children[i].value;
                break;
            }
        }
        return a;
    }

Og i codebehind, hvor scriptet bindes til controlleren:
opsparingsFormVælger.Attributes.Add("onChange", "visBfdVælger(this);");

Håber der er nogen der kan hjælpe. På forhånd tusind tak.
Avatar billede mireigi Novice
01. december 2009 - 11:59 #1
Det her skulle virke:
   
    function validateRadio(name)
    {
        var arrRadio = document.getElementsByName(source);
        var value = "";
        for (var i = 0; i < arrRadio.length; i++)
        {
            if (arrRadio[i].checked)
            {
                value = arrRadio[i].value;
                break;
            }
        }
       
        if (value != "")
        {
            //Gør noget
        }
    }


Jeg vil dog anbefale at du placerer begge RadioButtonLists (RBL) i et UpdatePanel og laver et AutoPostBack hver gang der sker en ændring i den ene RBL og så opdaterer indholdet i den anden RBL i den bagvedliggende kode.
Avatar billede zulaff Nybegynder
10. marts 2010 - 14:24 #2
Undskyld jeg ikke har fået svaret meget længe.

Tak for svaret. Jeg har ikke afprøvet det, men jeg fandt selv denne løsning:

function visBfdVælger(control)
    {
        var button0 = document.getElementById('<%= opsparingsFormVælger.ClientID %>_0');
        var button1 = document.getElementById('<%= opsparingsFormVælger.ClientID %>_1');
        var button2 = document.getElementById('<%= opsparingsFormVælger.ClientID %>_2');
        var controlObject = document.getElementById('<%= bfdVælger.ClientID %>');
       
        if (button0.checked || button1.checked) {
            RecursiveDisable(controlObject);
        }
        else
        {
            RecursiveEnable(controlObject);
        }
        return false;
    }

    function RecursiveDisable(control)
    {
        var children = control.childNodes;
        try{control.removeAttribute('disabled')}
        catch(ex){}
        for (var j = 0; j < children.length; j++)
        {
            RecursiveDisable(children[j]);
        }
    }
   
    function RecursiveEnable(control)
    {
        var children = control.childNodes;
        try{control.disabled = true}
        catch(ex){}
        for (var j = 0; j < children.length; j++)
        {
            RecursiveEnable(children[j]);
        }
    }

Læg endelig et svar, så giver jeg point:).
Avatar billede mireigi Novice
10. marts 2010 - 19:13 #3
Behold bare pointene. Du kom selv med løsningen :)
Avatar billede zulaff Nybegynder
11. marts 2010 - 09:54 #4
Tak for hjælpen alligevel:)
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