Javascriptで動的にチェックボックスを作る2
前回は、配列に格納した項目を
ループの中で文字列に埋め込み、チェックボックスを作りましたが、
こういう風に書くとカッコを数えたりするのがめんどくさいし、ミスにもつながりやすいですよね。
そこで、prototype.jsにはテンプレート機能なるものがあるので、今回はそのテンプレートを使用して前回のものを改良してみようと思います。
コードはこんな感じ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>テンプレートを使って動的にチェックボックスを作るサンプル</title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("prototype", "1.6.0.3");</script> <script type="text/javascript"> document.observe('dom:loaded', initCheckbox); function initCheckbox() { var values=['item1','item2','item3','item4']; var hoge = $('hoge'); var tmpl = new Template('<input type="checkbox" name="genre" value="#{value}" id="#{id}">' + '<label for="#{id}">#{value}</label>'); values.each( function (value, index){ var chkboxstr = tmpl.evaluate( { value:value.escapeHTML(), id:'genre_' + index } ); hoge.insert(chkboxstr); } ); } </script> </head> <body> <form id="frm1"> <div id="hoge"></div> </form> </body> </html>
なにが前回と違うのかということですが、何らかの値を埋め込んだ文字列を生成するのが簡単になります。同じ処理を繰り返すところでは、テンプレートオブジェクトのようなものを使ったほうが、あとあと理解しやすかったりもするんじゃないんですかねー。