JavaScriptって意外と面白い
ちょっと気になって、JavaScriptの勉強。
勉強して思ったけど、onsubmitとかのイベントもタグ内に書かなくてもいいのではって思った。
そこで
<html> <head> <title>TEST</title> <script language="JavaScript"> <!-- function doExecute() { document.mainForm.onsubmit = formOnSubmit; } function formOnSubmit() { alert("OK押したよ"); } // --> </script> </head> <body onload="javascript:doExecute();"> <form name="mainForm" method="GET"> <input type="submit" name="btn" value="OK" /> </form> </body> </html>
って作って「OK」ボタンを押したらonsubmitイベントが呼べた。
もしかして、これって常識!?今まで知らなかったなー。
うまく作れば、便利なパラメータチェックも作れるかも・・・
って思って、まずは知識を得るために作成
<html> <head> <title>TEST</title> <script language="JavaScript"> <!-- function requiredText() { return (this.value.length != 0); } function requiredSingleCheckBox() { return this.checked; } function validate() { this.clearMsg(); if (this.required != undefined && !this.required()) { this.writeMsg("必須項目です。") } } function writeInnerMsg(msg) { document.getElementById(this.name + "Msg").innerHTML = msg; } function clearInnerMsg() { this.writeMsg(""); } function validateOk() { return document.getElementById(this.name + "Msg").innerHTML.length == 0; } // ---------------------------------------------------------------------------- function validateAll() { var validators = new Array(); for (var i = 0; i < this.elements.length; i++) { if (this.elements[i].validate != undefined) { validators.push(this.elements[i]); } } for (var i = 0; i < validators.length; i++) { validators[i].validate(); } for (var i = 0; i < validators.length; i++) { if (!validators[i].ok()) { return false; } } return true; } // ---------------------------------------------------------------------------- function initDefaultValidator(inputTag) { inputTag.validate = validate; inputTag.writeMsg = writeInnerMsg; inputTag.clearMsg = clearInnerMsg; inputTag.ok = validateOk; } // ---------------------------------------------------------------------------- function doExecute() { document.mainForm.onsubmit = validateAll; initDefaultValidator(document.mainForm.txt); document.mainForm.txt.required = requiredText; initDefaultValidator(document.mainForm.box); document.mainForm.box.required = requiredSingleCheckBox; } // --> </script> </head> <body onload="javascript:doExecute();"> <form name="mainForm" method="GET"> <table> <tr> <th>TEXT</th> <td><input type="text" name="txt" value="" /></td> <td><span id="txtMsg"></span></td> </tr> <tr> <th>CEHCKBOX</th> <td><input type="checkbox" name="box" value="check!!" /></td> <td><span id="boxMsg"></span></td> </tr> </table> <input type="submit" name="btn" value="OK" /> </form> </body> </html>
HTMLはシンプルになるけど、イベントが離れた場所に定義される。
いいとこばっかじゃないねー。やっぱり。