Ciao,
avere un solo radio button sarebbe un'ipotesi poco probabile se non assurda. Ad ogni modo è possibile avere tale situazione ma, in questo caso, ciò che viene passato alla funzione è il singolo elemento input e non l'oggetto NodeList. Per questo motivo il ciclo for sarà saltato totalmente sfalsando il risultato.
Dovresti quindi aggiungere un ulteriore controllo che verifichi se ci sia un solo elemento oppure una lista di elementi.
Una soluzione pratica può essere quella di forzare sempre l'ottenimento di un array da mandare in pasto al ciclo for.
Io farei una cosa del genere, con un ciclo "for in":
codice:
function checkRadioboxes () {
var list = (this.length) ? this : [this];
for (var id in list){if(list[id].checked) return true;};
alert("Devi selezionare almeno un'opzione.");
return false;
}
Per i puritani della programmazione (usando un return singolo):
codice:
function checkRadioboxes () {
var list = (this.length) ? this : [this];
var isChecked = false;
for (var id in list){if(list[id].checked){isChecked=true; break}};
if(!isChecked) alert("Devi selezionare almeno un'opzione.");
return isChecked;
}