Io farei una cosa del genere.
codice:
XHTML
<form action="tuo_script.xxx" method="get">
<fieldset id="opzioni"><legend>Scelte</legend>
<ul>[*]
Primo
<ul>[*]
<input id="primo_1" name="primo" type="radio" value="20" />
<label for="primo_1">Giallo, 20€</label>
[*]
<input id="primo_2" name="primo" type="radio" value="10" />
<label for="primo_2">Verde, 10€</label>
[/list]
[*]
Secondo
<ul>[*]
<input id="secondo_1" name="secondo" type="radio" value="70" />
<label for="secondo_1">Grande, 70€</label>
[*]
<input id="secondo_2" name="secondo" type="radio" value="35" />
<label for="secondo_2">Piccolo, 35€</label>
[/list]
[/list]
</fieldset>
<fieldset id="invio"><legend>Invia il modulo</legend>
<p id="somma"></p>
<input type="submit" value="invia" /></p>
</fieldset>
</form>
Javascript
window.onload = function()
{
var opzioni = document.getElementById('opzioni')
var opzioni_inputs = opzioni.getElementsByTagName('input')
var opzioni_inputs_radios = new Array()
for (var i = 0; i < opzioni_inputs.length; i++)
{
if ( opzioni_inputs.item(i).getAttribute('type') == 'radio' )
{
opzioni_inputs_radios.push(opzioni_inputs.item(i))
}
}
var invio = document.getElementById('invio')
var somma = document.getElementById('somma')
function elenco_selezioni()
{
var selezionati = new Array()
for (var i = 0; i < opzioni_inputs_radios.length; i++)
{
if ( opzioni_inputs_radios[i].checked )
{
selezionati.push(opzioni_inputs_radios[i])
}
}
return selezionati
}
function sommatoria(campi)
{
var totale = 0
for (var i = 0; i < campi.length; i++)
{
totale += parseInt(campi[i].value)
}
return totale
}
function scrivi_totale(valore)
{
somma.innerHTML = ''
somma.innerHTML = 'La somma risulta essere '
somma.innerHTML += valore
somma.innerHTML += ' €'
}
for (var i = 0; i < opzioni_inputs_radios.length; i++)
{
opzioni_inputs_radios[i].onchange = function()
{
var campi_selezionati = elenco_selezioni()
var totale_somma = sommatoria(campi_selezionati)
scrivi_totale(totale_somma)
}
}
scrivi_somma(0)
}
Lo script è studiato in modo tale da funzionare con un numero qualsiasi di input radio (non sei quindi vincolato a due gruppi), basta che questi siano contenuti nel fieldset #opzioni. Il mark-up rimane pulito, in quanto tutte le varie funzioni vengono eseguite dallo script, senza bisogno di attributi di evento quali onclick, onchange e via dicendo. Si potrebbe migliorare in alcune parti, ma vedi intanto se funziona.