数値入力項目をカンマ区切りで再表示
元記事はこちらです。
■Application.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfsetting enableCFoutputOnly="yes"> <cfapplication name="#hash( getCurrentTemplatePath() )#">
■index.cfm
<!---///////////////////////////////////////////////////////////////// 表形式の縦横計算 ・数値のみ入力 ・カンマ区切りで表示 ・入力されるたびに合計計算 //////////////////////////////////////////////////////////////////---> <cfset request.row=3> <cfset request.col=3> <cfif findNoCase("ie", cgi.HTTP_USER_AGENT)> <cfset request.js_chkNum = " if(event.keyCode<'0'.charCodeAt(0) || event.keyCode>'9'.charCodeAt(0)) return false; "> <cfelse> <cfset request.js_chkNum = " if(event.charCode<'0'.charCodeAt(0) || event.charCode>'9'.charCodeAt(0)) return false; "> </cfif> <cfset local = structNew()> <cfoutput> <html> <head> <title>test</title> <style TYPE="text/css"> <!-- th { background-color:gainsboro; } --> </style> </head> <body> <form name="frm"> <table> <tr> <td> </td> <cfloop index="local.col" from="1" to="#request.col#"> <th>#local.col#</th> </cfloop> <th>ROW TOTAL</th> </tr> <cfloop index="local.row" from="1" to="#request.row#"> <tr> <th>#local.row#</th> <cfloop index="local.col" from="1" to="#request.col#"> <td> <input type="text" name="fld_#local.row#_#local.col#" style="text-align:right;" value="0" onKeyup="js_sum(this, #local.col#, #local.row#)" onKeypress="#request.js_chkNum#" onFocus="this.select()"> </td> </cfloop> <td> <input type="text" name="fld_row_#local.row#_ttl" style="text-align:right;" readonly> </td> </tr> </cfloop> <tr> <th>COL TOTAL</th> <cfloop index="local.col" from="1" to="#request.col#"> <td> <input type="text" name="fld_col_#local.col#_ttl" style="text-align:right;" readonly> </td> </cfloop> </tr> </table> </form> <script language="JavaScript" type="text/javascript"> <!-- function js_sum(obj, col, row){ with(document.frm){ <cfif findNoCase("ie", cgi.HTTP_USER_AGENT)> //タブの場合 if(event.keyCode==9){ obj.focus(); return; } </cfif> //行の合計 ttl = 0; for(i=1;i<=#request.col#;i++){ tmp = eval("fld_"+row+"_"+i+".value"); tmp = delComma1(tmp); ttl = ttl + eval(tmp); } eval("fld_row_"+row+"_ttl").value = insertComma1(ttl.toString()); //列の合計 ttl = 0; for(i=1;i<=#request.row#;i++){ tmp = eval("fld_"+i+"_"+col+".value"); tmp = delComma1(tmp); ttl = ttl + eval(tmp); } eval("fld_col_"+col+"_ttl").value = insertComma1(ttl.toString()); //入力した数値をカンマ表示に変換 tmp = delComma1(obj.value); tmp = insertComma1(tmp.toString()); obj.value = tmp; } } //カンマ挿入関数 function insertComma1(sourceStr) { var destStr = sourceStr; var tmpStr = ""; while (destStr != (tmpStr = destStr.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) { destStr = tmpStr; } return destStr; } //カンマ削除関数 function delComma1(w) { var z = w.replace(/,/g,""); return (z); } //--> </script> </body> </html> </cfoutput>