説明
DOMでチェックボックスにチェックが入った場合のみテキストフィールドを追加するにはappendChild()を使います。appendChild()で追加する<input>タグはdocument.createElement()で生成します。生成した後に必要なプロパティを設定しますが、必ずtypeプロパティから設定します。他のプロパティから設定するとInternet Explorerでは正しく反映されず、動作しないことがあります。
追加したテキストフィールドを削除するにはremoveChild()を使います。追加されたテキストフィールドはサンプルでは<div id="cField">の最初の子ノードなので、document.getElementById("cField").firstChildとしてアクセスすることができます。この子ノードをremoveChild()のパラメータに指定することでテキストフィールドを削除することができます。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>JavaScript Sample</title>
<link rel="stylesheet" type="text/css" href="main.css" media="all">
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<h1>チェックボックスがチェックされたらテキストフィールドを追加する(削除する)</h1>
<form action="./enq.cgi" method="get" id="mainForm" name="mainForm">
<label><input type="checkbox" id="checkCmt" name="checkCmt">意見を書く</label><br>
<div id="cField"></div>
</form>
</body>
</html>
window.onload = function(){
document.getElementById("checkCmt").onclick = function(){
if (this.checked){
var inputTag = document.createElement("input");
inputTag.type = "text";
inputTag.id = "uComment";
inputTag.name = "uComment";
document.getElementById("cField").appendChild(inputTag);
}else{
var fChild = document.getElementById("cField").firstChild;
document.getElementById("cField").removeChild(fChild);
}
}
}