//全域變數 var inputFocus;//該變數記錄當前焦點的input var bKeyDown=false;//記錄鍵盤被按下的狀態,當有鍵盤按下時其值為true function setRowClass(obj,className){ obj.className=className; var oldClass,toClass; if(className=="tableData") {oldClass="inputTableDataHit";toClass="inputTableData";} if(className=="tableDataHit") {oldClass="inputTableData";toClass="inputTableDataHit";} var objsInput=obj.all; for(var i=0;i<objsInput.length;i++) if(objsInput[i].tagName=="INPUT")if(objsInput[i].className==oldClass)objsInput[i].className=toClass; } function lightonRow(obj){ if(obj.tagName!="TR")return; //將所有未被選中的行取消高亮度現實 var tableOnlineEdit=obj.parentElement; while(tableOnlineEdit.tagName!="TABLE")tableOnlineEdit=tableOnlineEdit.parentElement; var objsCheckBox=tableOnlineEdit.all("checkLine"); for(var iCheckBox=1;iCheckBox<objsCheckBox.length;iCheckBox++) if(objsCheckBox[iCheckBox].checked==false) setRowClass(tableOnlineEdit.rows[iCheckBox+1],"tableData"); //當前點擊行高亮度顯示 setRowClass(obj,"tableDataHit"); } //得到obj的上階項目TagName function getUpperObj(obj,TagName){ var strTagName=TagName.toUpperCase(); var objUpper=obj.parentElement; while(objUpper){ if(objUpper.tagName==strTagName) break; objUpper=objUpper.parentElement; } return objUpper; } function getPosition(obj,pos){ var t=eval("obj."+pos); while(obj=obj.offsetParent){ t+=eval("obj."+pos); } return t; } function showInputSelect(obj,objShow){ inputFocus=obj;//記錄當前焦點input至全域變數 objShow.style.top =getPosition(obj,"offsetTop")+obj.offsetHeight+2; objShow.style.left=getPosition(obj,"offsetLeft"); objShow.style.width=obj.offsetWidth; objShow.value=obj.value; objShow.style.display="block"; } function setInputFromSelect(objTo,objShow){ objTo.value=objShow.options[objShow.selectedIndex].value; //objShow.style.display="none"; } function hideInput(obj){ obj.style.display="none"; } function clearRow(objTable){ var tbodyOnlineEdit=objTable.getElementsByTagName("TBODY")[0]; for (var i=tbodyOnlineEdit.children.length-1;i>=0;i--) tbodyOnlineEdit.deleteRow(i); } function deleteRow(objTable){ var tbodyOnlineEdit=objTable.getElementsByTagName("TBODY")[0]; for (var i=tbodyOnlineEdit.children.length-1; i>=0 ; i-- ) if (tbodyOnlineEdit.children[i].firstChild.firstChild.checked) tbodyOnlineEdit.deleteRow(i); } function addRow(objTable){ var tbodyOnlineEdit=objTable.getElementsByTagName("TBODY")[0]; var theadOnlineEdit=objTable.getElementsByTagName("THEAD")[0]; var elm = theadOnlineEdit.lastChild.cloneNode(true); elm.style.display=""; tbodyOnlineEdit.insertBefore(elm); } //將指定資料行的objRow的輸入欄位strName設定為strValue function setInputValue(objRow,strName,strValue){ var objs=objRow.all; for(var i=0;i<objs.length;i++){ if(objs[i].name==strName)objs[i].value=strValue; } } //添加一個執行個體資料行 function addInstanceRow(objTable,Names,Values){ var tbodyOnlineEdit=objTable.getElementsByTagName("TBODY")[0]; var theadOnlineEdit=objTable.getElementsByTagName("THEAD")[0]; var elm = theadOnlineEdit.lastChild.cloneNode(true) elm.style.display=""; for(var i=0;i<Names.length;i++) setInputValue(elm,Names[i],Values[i]); tbodyOnlineEdit.insertBefore(elm); } //將全部複選框設為指定值 function setOnlineEditCheckBox(obj,value){ var tbodyOnlineEdit=obj.getElementsByTagName("TBODY")[0]; for (var i=tbodyOnlineEdit.children.length-1; i>=0 ; i-- ) tbodyOnlineEdit.children[i].firstChild.firstChild.checked=value; } //為動態表格增加鍵盤導航功能,要使用該功能請在表格定義中增加事件處理onKeyDown="navigateKeys()" onKeyUp="setKeyDown(false)" //有一點點問題,當按下"->"跳轉到下一輸入欄位時,游標顯示在第一個字元之後 //建議仍然使用Tab鍵跳轉 function navigateKeys(){ if(bKeyDown) return; bKeyDown=true; var elm=event.srcElement; if(elm.tagName!="INPUT") return;//預設只對INPUT進行導航,可自行設定 var objTD=elm.parentElement; var objTR=objTD.parentElement; var objTBODY=objTR.parentElement.parentElement; var objTable=objTBODY.parentElement; var nRow=objTR.rowIndex; var nCell=objTD.cellIndex; var nKeyCode=event.keyCode; switch(nKeyCode){ case 37://<- if(getCursorPosition(elm)>0)return; nCell--; if(nCell==0){ nRow--;//跳轉到上一行 nCell=objTR.cells.length-1;//最後一列 } break; case 38://^ nRow--; break; case 39://-> if(getCursorPosition(elm)<elm.value.length)return; nCell++; if(nCell==objTR.cells.length){ nRow++;//跳轉到下一行首位置 nCell=1;//第一列 } break; case 40:///|/ nRow++; if(nRow==objTBODY.rows.length){ addRow(objTable);//增加一個空行 nCell=1;//跳轉到第一列 } break; case 13://Enter nCell++; if(nCell==objTR.cells.length){ nRow++;//跳轉到下一行首位置 nCell=1;//第一列 } if(nRow==objTBODY.rows.length){ addRow(objTable);//增加一個空行 nCell=1;//跳轉到第一列 } break; default://do nothing return; } if(nRow<2 || nRow>=objTBODY.rows.length || nCell<1 ||nCell>=objTR.cells.length) return; objTR=objTBODY.rows[nRow]; objTD=objTR.cells[nCell]; var objs=objTD.all; for(var i=0;i<objs.length;i++){ //此處使用ojbs[0],實際使用時可能需要加以修改,或加入其他條件 try{ lightonRow(objTR); objs[i].focus();//setCursorPosition(objs[i],-1); return; }catch(e){ continue; //if error occur,continue to next element } }//end for objs.length } //設定鍵盤狀態,即bKeyDown的值 function setKeyDown(status){ bKeyDown=status; } //得到游標的位置 function getCursorPosition(obj){ var qswh="@#%#^&#*$" obj.focus(); rng=document.selection.createRange(); rng.text=qswh; var nPosition=obj.value.indexOf(qswh) rng.moveStart("character", -qswh.length) rng.text=""; return nPosition; } //設定游標位置 function setCursorPosition(obj,position){ range=obj.createTextRange(); range.collapse(true); range.moveStart('character',position); range.select(); } |