<html>
<head>
<script type="text/javascript">
function validateForm(oForm){
var els = oForm.elements;
for(var i = 0; i < els.length; i++){
if('string' === typeof(els[i].getAttribute('data-message'))){
return valEl(els[i]);
}
}
}
function valEl(el){
var method = el.getAttribute('data-valMethod');
if('req' === method && (el.value === null || el.value === '')){
alert(el.getAttribute('data-message'));
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="#" onsubmit="return validateForm(this)" method="post">
First name:
<input data-message="First name must be filled out" data-valMethod="req" onchange="return valEl(this)"; name="fname"><br />
<input type="submit" value="Submit">
</form>
</body>
</html>
フォーム要素に必要なデータメッセージ属性がある場合、「onchange」で要素を検証できる1つの関数と、form.onsubmit()で各要素の検証を開始する別の関数に分割しました。
HTML5 以来、Data-* 属性はこれらのことに対して非常に便利です :-)
代わりに要素自体への参照を渡すため、フォームと要素の名前を検証スクリプトに保存する必要がなくなります。これは常に良いことです。
ここから、valEl 関数を拡張して、他のタイプの検証に対応できます。
これまでの唯一の制限は、要素ごとに 1 つのタイプの検証しか存在できないことですが、それは簡単に回避できるはずです。
ハッピーコーディング。/G
PS http://jsfiddle.net/ePPnn/11/サンプルコード