Il codice sarà più o men o così
[...]
Quindi le combinazioni saranno molte di più, perchè non è un unico gruppo ma 4 distinti.
Ok. Non mi è molto chiaro il contesto, se però cerchi una soluzione più pulita, dinamica, estendibile, ecc, personalmente continuo a pensare che un array, dove inserire facilmente i vari risultati, possa andare meglio, senza nulla togliere alle soluzione che già ti hanno proposto.
Qui un esempio completo di come farei io:
codice:
<!DOCTYPE HTML>
<html lang="it">
<head>
<title>Esempio</title>
<meta charset="utf-8">
<script>
var risultati = [
"risultato 1"
, "risultato 2"
, "risultato 3"
, "risultato 4"
, "risultato 5"
, "risultato 6"
, "risultato 7"
, "risultato 8"
, "risultato 9"
, "risultato 10"
, "risultato 11"
, "risultato 12"
, "risultato 13"
, "risultato 14"
, "risultato 15"
, "risultato 16"
];
function restituisciRisultato(){
if(!verificaInputSelezionati()) {
mostraOutput("Selezionare un valore per ogni variabile", true)
return;
}
var combinazioneBinaria =
(input_DA.checked ? "0" : "1")
+ (input_CA.checked ? "0" : "1")
+ (input_BA.checked ? "0" : "1")
+ (input_AA.checked ? "0" : "1")
;
var idArrayRisultati = parseInt(combinazioneBinaria, 2);
var risultato = risultati[idArrayRisultati];
mostraOutput(risultato)
}
function verificaInputSelezionati(){
// Controllo che almeno un radio-button sia selezionato per ogni gruppo
return (
input_AA.checked
+ input_AB.checked
+ input_BA.checked
+ input_BB.checked
+ input_CA.checked
+ input_CB.checked
+ input_DA.checked
+ input_DB.checked
) == 4;
}
function mostraOutput(msg,err){
// Visualizzo il messaggio in output
output.innerHTML = msg;
err ? output.classList.add("outputErr") : output.classList.remove("outputErr");
}
</script>
<style>
#output.outputErr {
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<h1>Variabili</h1>
<fieldset>
<legend>A</legend>
<label><input type="radio" name="A" id="input_AA">ALTO</label>
<label><input type="radio" name="A" id="input_AB">BASSO</label>
</fieldset>
<fieldset>
<legend>B</legend>
<label><input type="radio" name="B" id="input_BA">ALTO</label>
<label><input type="radio" name="B" id="input_BB">BASSO</label>
</fieldset>
<fieldset>
<legend>C</legend>
<label><input type="radio" name="C" id="input_CA">ALTO</label>
<label><input type="radio" name="C" id="input_CB">BASSO</label>
</fieldset>
<fieldset>
<legend>D</legend>
<label><input type="radio" name="D" id="input_DA">ALTO</label>
<label><input type="radio" name="D" id="input_DB">BASSO</label>
</fieldset>
<hr>
<input type="button" value="Restituisci risultato" onclick="restituisciRisultato();">
<span id="output"></span>
<hr>
</body>
</html>
In teoria se hai 4 variabili binarie, puoi ottenere 16 combinazioni (cioè 2 elevato 4).
L'array conterrà i 16 risultati. Ogni voce è associata al corrispondente valore binario calcolato in base alle 4 scelte, per cui parseInt(combinazioneBinaria, 2) restituisce un valore da 0 a 15 relativo all'indice della voce nell'array.
Dal momento che uno dei due radio deve per forza essere selezionato, ho inserito un controllo per verificare che tutte le scelte siano state effettuate (altrimenti visualizzo un messaggio di errore) e ho utilizzato il primo radio di ciascun gruppo per verificare se la scelta è 0 o 1, cioè se è stato selezionato rispettivamente il primo o il secondo radio button per ciascun gruppo.
Sinceramente, se le opzioni possibili per ogni gruppo di radio sono sempre e solo due, opterei per dei singoli checkbox (anziche 2 radio button), magari adattandone la grafica in modo che sia possibile distinguere le due scelte (ma questa è un'altra storia).
Magari fai qualche prova e vedi se può andare bene una soluzione del genere, oppure chiarisci meglio il contesto così che ti si possa suggerire qualcosa di più adatto; altrimenti vai pure di switch.
Buon proseguimento e buona permanenza sul forum.