Avatar billede weeelo Nybegynder
23. januar 2007 - 12:45 Der er 11 kommentarer og
1 løsning

Radio-button som billeder

Hejsa,

Jeg fandt dette tidligere spørgsmål (http://www.eksperten.dk/spm/470139), hvori det vises hvordan man erstatter de kedelige radio-buttons med billeder.

Men jeg har nogle ting jeg gerne vil have rettet i det script, min javascript-kunnen er dog nærmest lig nul.

Jeg har lavet følgende, som egentlig fungerer fint:

<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    <!--
    var g_objLastSelected = null;
    function chooseRadio( objRadio )
    {
        setRadioValue( objRadio, true, "_graphics/radio_on.gif" );
        setRadioValue( g_objLastSelected, false, "_graphics/radio_off.gif" );
        g_objLastSelected = objRadio;
    }
    function setRadioValue( objRadio, bSetValue, strGif )
    {
        if( objRadio )
        {
            var strRadioID = objRadio.id;
            var strValue = strRadioID.split( "_" )[1];
            var objHiddenField = document.getElementById( "ok" );
            if( objHiddenField && bSetValue )
            {
                objHiddenField.value = strValue;
            }
            objRadio.src = strGif;
        }
    }
    //-->
    </script>
</head>

<body>
<form name="form1">
<a href="#" id="radio_1" onclick="chooseRadio( this );">Valg 1</a>
<img src="_graphics/radio_off.gif" id="radio_1" onclick="chooseRadio( this );">
:
<img src="_graphics/radio_off.gif" id="radio_2" onclick="chooseRadio( this );">
<a href="#" id="radio_2" onclick="chooseRadio( this );">Valg 2</a>
<input type="hidden" name="ok" id="ok">
</form>
</body>
</html>

Mine problem er herefter som følger:

1. Når man klikker på en af "radio'erne", så bliver den fint markeret, men klikker man på den samme igen, så forsvinder den, hvilket den ikke burde gøre. Hvad kan man gøre her?

2. Når man klikker på teksten fremfor radio-knappen, så bliver valget gemt, men den tilhørende radio-button bliver ikke markeret. Nogle der kan hjælpe med det?

Hvis pointene er for små, så er jeg villig til at forhøje dem - kender ikke helt til problemernes omfang.

MVH Weeelo, der håber at I javascript-eksperter vil give en hjælpende hånd.
Avatar billede weeelo Nybegynder
23. januar 2007 - 14:19 #1
Jeg ved godt, der måske ikke er gået så lang tid, men er spørgsmålet måske for "svært" eller er gider man ikke løse mine problemer for lidt små point på eksperten?

Måske skal jeg bare vente lidt, før folk har tid til at svare :)
Avatar billede roenving Novice
23. januar 2007 - 17:05 #2
1. Byt rundt på dine setRadioValue i chooseRadio ...
2. Du skal referere til elementet, der skal markeres og ikke til a-tagget, f.eks.

<a href="#" id="a_radio_2" onclick="chooseRadio( document.getElementById('radio_2') );">Valg 2</a>

-- i øvrigt forholder det sig med id som f.eks. personnumre, der må _kun_ være een forekomst af hver, derfor ændringen i id i ovenstående !-)
Avatar billede weeelo Nybegynder
23. januar 2007 - 17:34 #3
Jamen, det er jo helt perfekt! Smid et svar, så er pointene dine.

I øvrigt er id, vel næppe nødvendigt i dette tilfælde, altså:


<a href="#" onclick="chooseRadio( document.getElementById('radio_2') );">Valg 2</a>

er nok, ikke?
Avatar billede weeelo Nybegynder
23. januar 2007 - 17:36 #4
Hov, i øvrigt..

Hvad hvis jeg vil have to i samme form? Altså sådan her:

<form name="form1">
<a href="#" onclick="chooseRadio( document.getElementById('radio_1') );">Valg 1</a>
<img src="_graphics/radio_off.gif" id="radio_1" onclick="chooseRadio( this );">
:
<img src="_graphics/radio_off.gif" id="radio_2" onclick="chooseRadio( this );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_2') );">Valg 2</a>
<input type="hidden" name="ok" id="ok">

<a href="#" onclick="chooseRadio( document.getElementById('radio_1') );">Valg 1a</a>
<img src="_graphics/radio_off.gif" id="radio_1a" onclick="chooseRadio( this );">
:
<img src="_graphics/radio_off.gif" id="radio_2a" onclick="chooseRadio( this );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_2') );">Valg 2a</a>
<input type="hidden" name="oka" id="oka">
</form>
Avatar billede roenving Novice
23. januar 2007 - 17:54 #5
Tjah, så må man jo lave funktionen, så den tester begge, f.eks.

    <script language="JavaScript" type="text/javascript">
    var g_objLastSelected = g_objLastSelecteda = null;
    function chooseRadio( objRadio ){
        var group = objRadio.id.split(/_\d/)[1];
        if(!group){
            setRadioValue( g_objLastSelected, false, "_graphics/radio_off.gif" );
            g_objLastSelected = objRadio;
        }else if(group == "a"){
            setRadioValue( g_objLastSelecteda, false, "_graphics/radio_off.gif" );
            g_objLastSelecteda = objRadio;
        }
        setRadioValue( objRadio, true, "_graphics/radio_on.gif" );
    }
    function setRadioValue( objRadio, bSetValue, strGif ){
        if( objRadio ){
            var group = objRadio.id.split(/_\d/)[1];
            var strRadioID = objRadio.id;
            var strValue = strRadioID.split( "_" )[1];
            var objHiddenField = document.getElementById( "ok" + group);
            if( objHiddenField && bSetValue )
            {
                objHiddenField.value = strValue;
            }
            objRadio.src = strGif;
        }
    }
    </script>

-- ret besværligt, hvis man skal gøre det flere gange, jeg tror, jeg ville tænke anderledes, hvis jeg selv skulle lave det !-)
Avatar billede weeelo Nybegynder
23. januar 2007 - 18:03 #6
Ok, er det noget du vil prøve at forsøge dig med?

Jeg har ca. 7 felter, hvor man skal vælge enten det ene eller det andet. Hvis du synes det er for meget arbejde, til at point kan gøre det, så bare lig et svar.

Pointene er i hvert fald dine, da du gav mig et brugbart svar :)
Avatar billede roenving Novice
23. januar 2007 - 18:10 #7
Et hurtigt eksempel:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    var g_objLastSelected = [];
    function chooseRadio( objRadio, group ){
        setRadioValue( g_objLastSelected[group], false, "_graphics/radio_off.gif", group );
        g_objLastSelected[group] = objRadio;
        setRadioValue( objRadio, true, "_graphics/radio_on.gif", group );
    }
    function setRadioValue( objRadio, bSetValue, strGif, group ){
        if( objRadio ){
            var strRadioID = objRadio.id;
            var strValue = strRadioID.split( "_" )[1];
            var objHiddenField = document.getElementById( "ok" + group);
            if( objHiddenField && bSetValue )
            {
                objHiddenField.value = strValue;
            }
            objRadio.src = strGif;
        }
    }
    </script>
</head>

<body>
<form name="form1">
<a href="#" onclick="chooseRadio( document.getElementById('radio_1'), 0 );">Valg 1</a>
<img src="_graphics/radio_off.gif" id="radio_1" onclick="chooseRadio( this, 0 );">
:
<img src="_graphics/radio_off.gif" id="radio_2" onclick="chooseRadio( this, 0 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_2'), 0 );">Valg 2</a>
<input type="hidden" name="ok" id="ok0">

<a href="#" onclick="chooseRadio( document.getElementById('radio_1a'), 1 );">Valg 1a</a>
<img src="_graphics/radio_off.gif" id="radio_1a" onclick="chooseRadio( this, 1 );">
:
<img src="_graphics/radio_off.gif" id="radio_2a" onclick="chooseRadio( this, 1 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_2a'), 1 );">Valg 2a</a>
<input type="hidden" name="oka" id="ok1">
</form>
</body>
</html>

-- Velbekomme '-)
Avatar billede weeelo Nybegynder
23. januar 2007 - 21:44 #8
Uh, det ser jo skønt ud. Jeg har sat det op med 7 og bagefter kaldt det med $_POST, men det lader ikke til at den kan kende forskel på om man vælger radio0 eller radio1, altså første eller anden radio i de 7 forskellige.

Her er hvad jeg har gjort:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    var g_objLastSelected = [];
    function chooseRadio( objRadio, group ){
        setRadioValue( g_objLastSelected[group], false, "_graphics/radio_off.gif", group );
        g_objLastSelected[group] = objRadio;
        setRadioValue( objRadio, true, "_graphics/radio_on.gif", group );
    }
    function setRadioValue( objRadio, bSetValue, strGif, group ){
        if( objRadio ){
            var strRadioID = objRadio.id;
            var strValue = strRadioID.split( "_" )[1];
            var objHiddenField = document.getElementById( "ok" + group);
            if( objHiddenField && bSetValue )
            {
                objHiddenField.value = strValue;
            }
            objRadio.src = strGif;
        }
    }
    </script>
</head>

<body>
<?
if ($_POST['save']) {
?>
Valg 1:<? echo $_POST['ok0']; ?><br>
Valg 2:<? echo $_POST['ok1']; ?><br>
Valg 3:<? echo $_POST['ok2']; ?><br>
Valg 4:<? echo $_POST['ok3']; ?><br>
Valg 5:<? echo $_POST['ok4']; ?><br>
Valg 6:<? echo $_POST['ok5']; ?><br>
Valg 7:<? echo $_POST['ok6']; ?><br>

<?
}
?>
<form method="post" name="form" action="<? $_SERVER['PHP_SELF']; ?>">
<a href="#" onclick="chooseRadio( document.getElementById('radio_0_0'), 0 );">Valg 0.1</a>
<img src="_graphics/radio_off.gif" id="radio_0_0" onclick="chooseRadio( this, 0 );">
:
<img src="_graphics/radio_off.gif" id="radio_0_1" onclick="chooseRadio( this, 0 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_0_1'), 0 );">Valg 0.2</a>
<input type="hidden" name="ok0" id="ok0">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_1_0'), 1 );">Valg 1.1</a>
<img src="_graphics/radio_off.gif" id="radio_1_0" onclick="chooseRadio( this, 1 );">
:
<img src="_graphics/radio_off.gif" id="radio_1_1" onclick="chooseRadio( this, 1 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_1_1'), 1 );">Valg 1.2</a>
<input type="hidden" name="ok1" id="ok1">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_2_0'), 2 );">Valg 2.1</a>
<img src="_graphics/radio_off.gif" id="radio_2_0" onclick="chooseRadio( this, 2 );">
:
<img src="_graphics/radio_off.gif" id="radio_2_1" onclick="chooseRadio( this, 2 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_2_1'), 2 );">Valg 2.2</a>
<input type="hidden" name="ok2" id="ok2">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_3_0'), 3 );">Valg 3.1</a>
<img src="_graphics/radio_off.gif" id="radio_3_0" onclick="chooseRadio( this, 3 );">
:
<img src="_graphics/radio_off.gif" id="radio_3_1" onclick="chooseRadio( this, 3 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_3_1'), 3 );">Valg 3.2</a>
<input type="hidden" name="ok3" id="ok3">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_4_0'), 4 );">Valg 4.1</a>
<img src="_graphics/radio_off.gif" id="radio_4_0" onclick="chooseRadio( this, 4 );">
:
<img src="_graphics/radio_off.gif" id="radio_4_1" onclick="chooseRadio( this, 4 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_4_1'), 4 );">Valg 4.2</a>
<input type="hidden" name="ok4" id="ok4">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_5_0'), 5 );">Valg 5.1</a>
<img src="_graphics/radio_off.gif" id="radio_5_0" onclick="chooseRadio( this, 5 );">
:
<img src="_graphics/radio_off.gif" id="radio_5_1" onclick="chooseRadio( this, 5 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_5_1'), 5 );">Valg 5.2</a>
<input type="hidden" name="ok5" id="ok5">
<br><br>
<a href="#" onclick="chooseRadio( document.getElementById('radio_6_0'), 6 );">Valg 6.1</a>
<img src="_graphics/radio_off.gif" id="radio_6_0" onclick="chooseRadio( this, 6 );">
:
<img src="_graphics/radio_off.gif" id="radio_6_1" onclick="chooseRadio( this, 6 );">
<a href="#" onclick="chooseRadio( document.getElementById('radio_6_1'), 6 );">Valg 6.2</a>
<input type="hidden" name="ok6" id="ok6">
<br><br>
<input type="submit" name="save" value="Gem">
</form>
</body>
</html>
Avatar billede weeelo Nybegynder
24. januar 2007 - 10:21 #9
Ahhh, kun én _ ...

Du får point roenving - super hjælp!
Avatar billede roenving Novice
24. januar 2007 - 21:15 #10
-- og tak for point ;~}
Avatar billede weeelo Nybegynder
29. januar 2007 - 11:53 #11
Lige et hurtigt spørgsmål, hvis du stadig kigger med her roenving.

Hvis jeg skal lave en af dem præ-selected, er det så nok bare at sætte den til radio_on.gif istedet for radio_off.gif eller skal jeg lave noget andet smart?

MVH Weeelo
Avatar billede weeelo Nybegynder
29. januar 2007 - 13:18 #12
Ok, det ser ikke ud til at fungere.
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