/** * プロジェクト共通関数 * * @author D.Magata * @version 1.0 */ // 名前空間の宣言 var myproject; if (!myproject) myproject = {}; // submitイベントリスト myproject.submitEventList = []; // submitイベント引数 myproject.submitEventArgs = []; /** * Submit時イベント追加 * (ページ内の全フォームのSubmit時に共通して行う処理を追加する) * * @param 実行するJavaScript関数名 * */ myproject.addSubmitEvent = function(funcName){ var objForms; if ((document.forms)&&(document.forms.length)){ objForms = document.forms; } if (objForms) { var no = 0; for (i in objForms) { var objForm = objForms[i]; if (!myproject.submitEventList[no]){ myproject.submitEventArgs[no] = []; myproject.submitEventList[no] = []; if (objForm.onsubmit){ myproject.submitEventList[no][0] = objForm.onsubmit; } } if ((!arguments)||(arguments.length==0)) { myproject.submitEventArgs[no][myproject.submitEventList[no].length] = null; myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"()"); } else if (arguments.length==1){ myproject.submitEventArgs[no][myproject.submitEventList[no].length] = new Array(arguments[1]); myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"(arguments[0])"); } else if (arguments.length==2){ myproject.submitEventArgs[no][myproject.submitEventList[no].length] = new Array(arguments[1],arguments[2]); myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1])"); } else if (arguments.length==3){ myproject.submitEventArgs[no][myproject.submitEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3]); myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2])"); } else if (arguments.length==4){ myproject.submitEventArgs[no][myproject.submitEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3],arguments[4]); myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2],arguments[3])"); } else if (arguments.length==5){ myproject.submitEventArgs[no][myproject.submitEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]); myproject.submitEventList[no][myproject.submitEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])"); } objForm.onsubmit = new Function("return myproject.onSubmitFunc(" + no + ")"); no = no + 1; } } }; /* * Submit時イベント実行 *(Submit前に行う共通処理を実行する) * * @param オブジェクトNo * @return 処理結果 */ myproject.onSubmitFunc = function(no){ var res; if (myproject.submitEventList[no]) { for (i in myproject.submitEventList[no]) { var args = myproject.submitEventArgs[no][i]; var func = myproject.submitEventList[no][i]; if ((!args)||(args.length==0)){ res = func(); } else if (args.length==1){ res = func(args[0]); } else if (args.length==2){ res = func(args[0],args[1]); } else if (args.length==3){ res = func(args[0],args[1],args[2]); } else if (args.length==4){ res = func(args[0],args[1],args[2],args[3]); } else if (args.length==5){ res = func(args[0],args[1],args[2],args[3],args[4]); } } } return res; }; // pageMoveイベントリスト myproject.pagemoveEventList = []; // pageMoveイベント用引数 myproject.pagemoveEventArgs = []; /** * ページ移動時イベント追加 *(ページ内の全リンク()が押された時に共通して行う処理を追加する) * * @param 実行するJavaScript関数名 * */ myproject.addPageMoveEvent = function(funcName){ var objAll; if(document.all){ objAll = document.all } else if (document.getElementsByTagName){ objAll = document.getElementsByTagName('A'); } if (objAll) { var no = 0; for (i in objAll) { if (objAll[i].tagName == "A"){ var target = objAll[i]; myproject.pagemoveEventArgs[no] = []; if (!myproject.pagemoveEventList[no]){ myproject.pagemoveEventArgs[no] = []; myproject.pagemoveEventList[no] = []; if (target.onclick){ myproject.pagemoveEventList[no][0] = target.onclick; } } if ((!arguments)||(arguments.length==0)) { myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = null; myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"()"); } else if (arguments.length==1){ myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = new Array(arguments[1]); myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"(arguments[0])"); } else if (arguments.length==2){ myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = new Array(arguments[1],arguments[2]); myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1])"); } else if (arguments.length==3){ myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3]); myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2])"); } else if (arguments.length==4){ myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3],arguments[4]); myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2],arguments[3])"); } else if (arguments.length==5){ myproject.pagemoveEventArgs[no][myproject.pagemoveEventList[no].length] = new Array(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]); myproject.pagemoveEventList[no][myproject.pagemoveEventList[no].length] = new Function("return "+funcName+"(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])"); } target.onclick = new Function("return myproject.onPageMoveFunc(" + no + ")"); no = no + 1; } } } }; /* * ページ移動時イベント実行 *(ページ移動前に行う共通処理を実行する) * * @param オブジェクトNo * @return 処理結果 */ myproject.onPageMoveFunc = function(no){ if (myproject.pagemoveEventList[no]) { var res; for (i in myproject.pagemoveEventList[no]) { var args = myproject.pagemoveEventArgs[no][i]; var func = myproject.pagemoveEventList[no][i]; if ((!args)||(args.length==0)){ res = func(); } else if (args.length==1){ res = func(args[0]); } else if (args.length==2){ res = func(args[0],args[1]); } else if (args.length==3){ res = func(args[0],args[1],args[2]); } else if (args.length==4){ res = func(args[0],args[1],args[2],args[3]); } else if (args.length==5){ res = func(args[0],args[1],args[2],args[3],args[4]); } } } return res; }; /** * 2重submitチェックを行う * @param 2重submit時に表示するエラーメッセージ */ myproject.submited = false; myproject.submitedMsg = "処理中です。しばらくお待ち下さい。" myproject.checkSubmit = function(msg){ if (myproject.submited) { if ((!msg)||(msg=="")){ alert(myproject.submitedMsg); } else { alert(msg); } return false; } else if (myproject.pagemoved){ if ((!msg)||(msg=="")){ alert(myproject.pagemovedMsg); } else { alert(msg); } return false; } else { myproject.submited = true; return true; } } /** * ページ遷移済みチェック * @param 既にリンク移動していた時に表示するエラーメッセージ */ myproject.pagemoved = false; myproject.pagemovedMsg = "ページ移動中です。しばらくお待ち下さい"; myproject.checkPageMove = function(msg){ if (myproject.submited) { if ((!msg)||(msg=="")){ alert(myproject.submitedMsg); } else { alert(msg); } return false; } else if (myproject.pagemoved){ if ((!msg)||(msg=="")){ alert(myproject.pagemovedMsg); } else { alert(msg); } return false; } else { myproject.pagemoved = true; return true; } } /** * オブジェクトの内容を表示する(デバッグ用). * オブジェクトの内容を指定されたブロック要素に表示する * (ブロック要素が存在しない場合は alert表示する) * * @param Object オブジェクト * @param Object内容を表示するブロック要素のid ※div等のidを指定する * @return String param obj オブジェクト */ myproject.objDump = function(obj, msgAreaId){ var strDump = myproject._getObjDump(obj,0); if (document.getElementById(msgAreaId)){ strDump = "
" + strDump + "
"; document.getElementById(msgAreaId).innerHTML = document.getElementById(msgAreaId).innerHTML + strDump; } else { var objName = "オブジェクト"; try { objName = obj.name } catch (e){} try { objName = obj.id } catch (e){} objName = objName + "の内容"; myproject.dispDebugWin(objName , strDump); } }; /** * オブジェクトの内容を取得する(デバッグ用). * * @param Object オブジェクト * @param 要素内における階層 * @return String param obj オブジェクト */ myproject._getObjDump = function(obj,lv){ var strDump = ""; for (i in obj) { var subObj = obj[i]; var indentStr = "" for (j = 0; j < lv; j++) { indentStr = indentStr + "\t"; } var objLen; if (typeof subObj == "object") { try { objLen = subObj.length; } catch (e){ } } if (objLen){ strDump = strDump + "
\r\n" + indentStr + i + "{"; strDump = strDump + myproject._getObjDump(subObj, (lv + 1)); strDump = strDump + "
\r\n" + indentStr + "}"; } else { strDump = strDump + "
\r\n" + indentStr + i + ':' + obj[i]; } } return strDump; }; /** * デバッグ用のウィンドウを表示する * * @param タイトル * @param 表示内容 */ myproject.dispDebugWin = function(title, body){ var winId = "debug_"+title; var bodyId = winId + "_body"; if (!document.getElementById(bodyId)){ var str = "
"; str = str + ""; str = str + ""; str = str + ""; str = str + "
" + title + "×
" + body + "
"; str = str + "
"; document.body.innerHTML = document.body.innerHTML + str; } else { document.getElementById(winId).style.display = 'block'; document.getElementById(bodyId).innerHTML = body; } }; /** * サブウィンドウを画面の中央にOPENする * * @param URL * @param window.open時のname * @param window.open時の幅 * @param window.open時の高さ * @param window.open時のオプション文字列 * @return サブウィンドウオブジェクト */ myproject.openSubwin = function(url,name,sw,sh,option){ if(document.all){ wx=screen.width; wy=screen.height; } if(document.layers){ wx=screen.availWidth; wy=screen.availHeight; } px=(wx - sw) / 2; py=(wy - sh) / 2 - 50; myWin=window.open(url,name,"width="+sw+",height="+sh + "," + option); myWin.moveTo(px,py); return myWin; }; /** * オブジェクトのコピー * (配列の要素がオブジェクトの場合でも、 * オブジェクトへの参照でなくコピーとして作成する) * * @param オブジェクト * @return オブジェクトのコピー */ myproject.copyObject = function(obj){ var newObj = new Object(); try { for (i in obj) { if (typeof obj[i] == "object"){ newObj[i] = myCopyObject(obj[i]); } else { newObj[i] = obj[i]; } } } catch (e){ return new Array(); } return newObj; }; /** * 要素の追加 * (指定されたオブジェクトに要素を追加する) * * @param 親オブジェクト * @param 要素のタイプ(input, a , div など) * @param 要素の属性情報(JSON) * * (使用例) * myproject.addElement(document.forms[0], "input", {"type":"text", "name":"text01", value="ABC"}); * * 上記では という要素を1つめのformに追加している */ myproject.addElement = function( parObj, type, attr){ var ele = document.createElement(type); for (name in attr) { ele.setAttribute( name, attr[name]); } parObj.appendChild(ele); }; /** * 数字のみ入力を受け付けるフィールドを定義する * * @param 対象のオブジェクトのID */ myproject.numberOnlyField = function(id){ obj = document.getElementById(id); obj.onkeydown = myproject.inputNumberOnly; obj.onchange = new Function("myproject.delExcludeNumber('"+id+"')"); }; /** * 数字以外の入力データを除去する */ myproject.delExcludeNumber = function(id){ var obj = document.getElementById(id); var val = obj.value; var numVal = ""; for (i = 0; i < val.length; i++) { var str = val.substring(i,i+1); if ((str>="0")&&(str<="9")) { numVal = numVal + "" + str; } } obj.value = numVal; }; /** * 数字以外のキー入力を受け付けない */ myproject.inputNumberOnly = function(e){ if (e) { evt = e; } else if (event) { evt = event; } if (evt) { if ((evt.keyCode>=48)&&(evt.keyCode<=57)){ // [0][1][2][3][4][5][6][7][8][9] } else if ((evt.keyCode>=37)&&(evt.keyCode<=40)) { // [←][↑][→][↓] } else if ((evt.keyCode==8)||(evt.keyCode==46)) { // [Delete][Backspace] } else { return false; } } }; /** * 指定ミリ秒間SLEEPする * * @param */ myproject.sleep = function(msec){ var start = (new Date()).getTime(); while (true) { if ((new Date()).getTime() >= start + msec) break; } };