一般的なフォームは初期値から内容が変更されても見かけ上、何の変化もありません。 ユーザーインターフェースを考えた際に、この見栄えが変わることで良いこともあります。 これを実現したサンプルになります。
フォームの各コントロールの内容が初期値から変更されたときに、背景色を変更します。
フォーム全体をイベントハンドラし、4つの関数をコールしています。 全てを使っても良いですし、必要に応じて必要な関数のみを使用しても構いません。 ただし、フォーム、その各コントロールに対して名前を指定しています。 各関数ではこの名前を直接記述していますので、name属性値に合わせて内容を変更する必要があります。
以下に各関数の説明を行います。 サンプルを前提に説明しますが、コントロール部品の追加や削除、名前の変更なども ここを参考に行って下さい。
ただし、フォームの名前は「name="frm"」とし、変更する場合は、「document.frm」の「frm」の 部分も同様に変更して下さい。
function chgText(){ inival = document.frm.name.defaultValue; val = document.frm.name.value; if(val != inival){ document.frm.name.style.backgroundColor = ChangedColorText; }else{ document.frm.name.style.backgroundColor = DefaultColorText; } inival = document.frm.tuika.defaultValue; val = document.frm.tuika.value; if(val != inival){ document.frm.tuika.style.backgroundColor = ChangedColorText; }else{ document.frm.tuika.style.backgroundColor = DefaultColorText; } }
function chgRadio(){ for(i = 0; i < document.frm.sex.length; i++){ inival = document.frm.sex[i].defaultChecked; val = document.frm.sex[i].checked; if(val != inival){ document.frm.sex[i].style.backgroundColor = ChangedColorRadio; }else{ document.frm.sex[i].style.backgroundColor = DefaultColorRadio; } } for(i = 0; i < document.frm.tuika.length; i++){ inival = document.frm.tuika[i].defaultChecked; val = document.frm.tuika[i].checked; if(val != inival){ document.frm.tuika[i].style.backgroundColor = ChangedColorRadio; }else{ document.frm.tuika[i].style.backgroundColor = DefaultColorRadio; } } }
function chgSelect(){ num = document.frm.sel.selectedIndex; val = document.frm.sel.options[num].defaultSelected; if(!val){ document.frm.sel.style.backgroundColor = ChangedColorSelect; }else{ document.frm.sel.style.backgroundColor = DefaultColorSelect; } num = document.frm.tuika.selectedIndex; val = document.frm.tuika.options[num].defaultSelected; if(!val){ document.frm.tuika.style.backgroundColor = ChangedColorSelect; }else{ document.frm.tuika.style.backgroundColor = DefaultColorSelect; } }
IE4,NN6以上
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>フォームコントローラ</title> <style type="text/css"> <!-- .MainForm{ width: 400px; padding: 10px; border: 2px outset #999; background-color: #999; } .FormPart{ margin: 5px 0px; } --> </style> <script language="JavaScript"> <!-- function chgForm(){ chgText(); // テキスト用関数 chgRadio(); // ラジオボタン用関数 chgCheckbox(); // チェックボックス用関数 chgSelect(); // セレクト(コンボボックス)用関数 } // テキスト用関数 var DefaultColorText = "#fff"; // 初期値の時の背景色 var ChangedColorText = "#f99"; // 初期値変更時の背景色 function chgText(){ inival = document.frm.name.defaultValue; val = document.frm.name.value; if(val != inival){ document.frm.name.style.backgroundColor = ChangedColorText; }else{ document.frm.name.style.backgroundColor = DefaultColorText; } } // ラジオボタン用関数 var DefaultColorRadio = "#999"; // 初期値の時の背景色 var ChangedColorRadio = "#f99"; // 初期値変更時の背景色 function chgRadio(){ for(i = 0; i < document.frm.sex.length; i++){ inival = document.frm.sex[i].defaultChecked; val = document.frm.sex[i].checked; if(val != inival){ document.frm.sex[i].style.backgroundColor = ChangedColorRadio; }else{ document.frm.sex[i].style.backgroundColor = DefaultColorRadio; } } } // チェックボックス用関数 var DefaultColorCheckbox = "#999"; // 初期値の時の背景色 var ChangedColorCheckbox = "#f99"; // 初期値変更時の背景色 function chgCheckbox(){ for(i = 0; i < document.frm.hobby.length; i++){ inival = document.frm.hobby[i].defaultChecked; val = document.frm.hobby[i].checked; if(val != inival){ document.frm.hobby[i].style.backgroundColor = ChangedColorCheckbox; }else{ document.frm.hobby[i].style.backgroundColor = DefaultColorCheckbox; } } } // セレクト(コンボボックス)用関数 var DefaultColorSelect = "#fff"; // 初期値の時の背景色 var ChangedColorSelect = "#f99"; // 初期値変更時の背景色 function chgSelect(){ num = document.frm.sel.selectedIndex; val = document.frm.sel.options[num].defaultSelected; if(!val){ document.frm.sel.style.backgroundColor = ChangedColorSelect; }else{ document.frm.sel.style.backgroundColor = DefaultColorSelect; } } // --> </script> </head> <body> <p style="font-size:14pt; font-weight:bold; color:#00f"> フォームの各コントロールは、初期値から変更されると背景色が変わります。 </p> <form name="frm" class="MainForm" onmousemove="JavaScript:chgForm()" onkeydown="JavaScript:chgForm()" onkeyup="JavaScript:chgForm()"> Name <input type="text" name="name" class="FormPart" value="Input your name"><br> <input type="radio" name="sex" class="FormPart">Male <input type="radio" name="sex" class="FormPart">Female <input type="radio" name="sex" class="FormPart">Neutral<br> <input type="checkbox" name="hobby" class="FormPart">Sport <input type="checkbox" name="hobby" class="FormPart">Movie <input type="checkbox" name="hobby" class="FormPart">Music<br> <select name="sel" class="FormPart"> <option>HTML</option> <option>CSS</option> <option selected="selected">XML</option> <option>JavaScript</option> </select> </form> </body> </html>