めも

今新機能開発中で、優秀な後輩さんが最終チェックしてるんですが私が作った部分不具合多すぎw
登録されている番号を表示して、どれかひとつラジオボタンを選択して送信されたら次の画面に進むという処理。
ひとつも選択されなかった場合はアラート。
修正前のロジックだと表示するラジオボタンがひとつしかなかった場合、length がとれないらしい。
(changeRagio 自体を参照する場合に個数がひとつだと配列が使えない)

☆修正前
function CheckRadio()
{
	var chkflg = "";
	// radio ボタンの個数分ループ
	for ( i = 0; i < document.forms[2].changeRadio.length; i++ ) {	
		if ( document.forms[2].changeRadio[i].checked ) {
			// check がついているボタンの value を取得
 			chkflg  = document.forms[2].changeRadio[i].value;
		}
	}

	if (chkflg != "") {
		return true;
	} else{				
		alert("番号を選択してください。");
		return false;
	}
}


アラートで見てみると length = undefined ってなる。よって value も取得できないorz
下記のように修正してみた。
getElementsByName で、changeRadio という名前のエレメントを取得、とするとラジオボタンの数がひとつでも配列の形でアクセスできるらしい。
チェックのついてる個数を数えて判断する。

☆修正後
function CheckRadio()
{
	var chkflg = 0;
	// ラジオボタン取得
	var radioButtons = document.getElementsByName('changeRadio');
	// ラジオボタンの個数取得
	var count = radioButtons.length;
	//  count 分ループ
	for ( i = 0; i < count; i++ ) {
		if ( radioButtons[i].checked == true ) {
			// check あり
 			chkflg++;
		}
	}
	
	if (chkflg != 0) {
		return true;
	} else{				
		alert("番号を選択してください。");
		return false;
	}
}

どんなもんじゃーい!!!