JavaScript備忘録

2008-04-09

[]存在しない部品のvalueにアクセスしてはいけない。 23:36

たとえば、テキストボックス3つとラジオボタン2つと普通のボタンが一つあるとする。

普通のボタンを押下すると3つのテキストボックスがクリアされる仕様になっていて、クリア処理はjavascriptで書いているものとする。

ラジオボタンにはAボタンとBボタンとがあって、Bボタンを選択した場合のみ、テキストボックス2つしか表示されないものとする。

このような場合、ラジオBボタンを選択している状態では、普段表示されているはずのテキストボックスが表示されないことになるわけだが、注意したいのが、普通のボタン押下したときに、この表示されていないテキストボックスのvalueを空文字に設定するとjavascriptエラーになる。

これを回避するには、そのテキストボックスが存在することを確認してから、value=""すればよい

以下、そのためのコードです。(説明長すぎた。。)


<html>
<head>
<script language="JavaScript">
<!--
function clearAll() {
	frm = document.frmmain;
	len = frm.elements.length;
	for(i = 0; i < len; i++) {
		ec = frm.elements[i];
		switch (ec.name) {
		case "mytext1":
		case "mytext2":
			ec.value = "";
			break;
		case "mytext3":
			ec.value = "goodby";
			break;
		}
	}
}
-->
</script>
<body>
<form name=frmmain>
<input type=text name=mytext1 value=hello1>
<input type=text name=mytext2 value=hello2>
<input type=text name=mytext3 value=hello3>
<input type=button name=mybutton value=mybutton onClick="clearAll()">
</body>
</form>
</html>