JavaScriptの引数に連想配列を使う
- February 21st, 2011
JavaScriptを使っていて、同じような処理を繰り返ししたいけど、タグやIDの違いで関数が長文になったり、汎用性悪くなる場合が、しばしばある。
無理矢理感はあるけど、引数に連想配列をいれれば、短くて汎用性がある関数が出来そう。
あまり使い道が思いつかないけど、formの無効化処理には、使えそうなので、メモとサンプルを記載。
JavaScript(イベント時に実行する関数)
引数にオブジェクト(配列)を渡すので、for文で処理する。
// value:判定用の値、obj:処理する要素
function changeForm(value, obj) {
if (!value || typeof obj != 'object') return false;
for (var i in obj) {
var elm = $('*[name=" + i + "]');
switch (value) {
case 'init' : // 初期化
elm.removeAttr("disabled");
elm.val();
break;
case 'disable' : // 無効化
setDisableForm(i, obj[i]);
break;
default : break;
}
}
}
JavaScript(フォームの無効化をする関数)
フォームのタイプ別で処理を行う。
function setDisableForm(name, type) {
if (!name || !type) return false;
var elm = $('*[name=" + name + "]');
elm.attr('disabled', 'disabled');
switch (type) {
case 'checkbox' : elm.prop('checked', false); break;
case 'radio' : elm.prop('checked', false); break;
case 'select' : elm.val(''); break;
case 'text' : elm.val(''); break;
case 'password' : elm.val(''); break;
case 'textarea' : elm.val(''); break;
case 'submit' : break;
case 'button' : break;
case 'reset' : break;
case 'file' : break;
case 'image' : break;
case 'hidden' : elm.val(''); break;
default : break;
}
}
HTML
changeForm()関数に渡すオブジェクトは、キーにname属性、値にtype属性を指定する。
<div>
<select onchange="changeForm(this.value, {'name':'text', 'type':'select'});">
<option value="">-</option>
<option value="init">初期化</option>
<option value="disable">無効化</option>
</select>
</div>
<!-- 処理するFROMタグ -->
<div>
<input type="text" name="name" value="" />
</div>
<div>
<select name="type">
<option value="">-</option>
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</select>
</div>- February 21st, 2011
