강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

table,tr,td 의 innerHTML 속성으로 좀 가꾸놀기
작성자 : 99 단국강토
등록날짜 : 2009.02.09 09:59
3,923

어떤 데이터 셋을 만들때
만들어가는 과정에서 매번 insert+select 를 페이지 리로드 해가는 방식으로
구현하는 분들께는
조금 자극이 될듯해서..^^

DB저장 전에 table의 셀내용을 추가/수정/삭제/순서변경 등을 처리할수있는 스크립트입니다.

원랜 제가 매번 <script src=common.js></script> 식으로 정의해놓고 쓰는 함수들을 다 끄집어 냈더니 무지 길어졌군요.

첫번째링크 :소스
두번째링크 : 테스트 페이지

 

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<script>
var selectedIdx = -1;
var tblRowLimit = 10; //10개 행만 지원 합니다.

//테이블의 맨 마지막에 새 행을 추가합니다.
function insertNewRow(cellHtml)
{

var oCell = new Array();

if(cellHtml.length ==0){
return void(alertFocus("입력할 내용이 없습니다",document.frmData.cellHtml));

}
if(tblNews.rows.length >= tblRowLimit){
return void(alertFocus("10개 이상은 입력 하실수 없습니다.",document.frmData.cellHtml));
}

//새 행 추가
var gRows  = tblNews.insertRow();
gRows.onmousedown = function(){selectRow(this)}
gRows.onmouseover = function(){tblMouseOver(this)}
gRows.onmouseout = function(){tblMouseOut(this)}
//새 셀(td)추가
oCell[0] = gRows.insertCell();

//각셀의 값 입력
oCell[0].innerHTML = cellHtml;

//추가된 셀 선택
selectRow(gRows) ;

}

//cell HTML 업데이트
function updateTblRow()
{
if(selectedIdx != -1){
if(document.frmData.cellHtml.value.length ==0){
alertFocus("수정할 내용이 없습니다",document.frmData.cellHtml);
}else{
tblNews.rows[selectedIdx].cells[0].innerHTML=document.frmData.cellHtml.value;
}
}
}


//위로!
function upRow()
{
if(selectedIdx == -1) alert('선택두 안하셨구마~');
else if(selectedIdx == 0) alert('이미 맨위구마~ ㅡㅡ;;');
else{

var thisCell = tblNews.rows[selectedIdx].cells[0];
var distCell = tblNews.rows[selectedIdx -1].cells[0];
var tmp = distCell.innerHTML;

distCell.innerHTML = thisCell.innerHTML;
thisCell.innerHTML = tmp;
selectRow(tblNews.rows[selectedIdx -1]);
}
}


//아래로!
function downRow()
{
if(selectedIdx == -1) alert('선택두 안하셨구마~');
else if(selectedIdx + 1 >= tblNews.rows.length) alert('이미 맨 아래 구마~ ㅡㅡ;;');
else{

var thisCell = tblNews.rows[selectedIdx].cells[0];
var distCell = tblNews.rows[selectedIdx +1].cells[0];
var tmp = distCell.innerHTML;

distCell.innerHTML = thisCell.innerHTML;
thisCell.innerHTML = tmp;
selectRow(tblNews.rows[selectedIdx +1]);
}
}

//삭제
function clearRow()
{
tblNews.deleteRow(selectedIdx);
selectedIdx = -1;
}

//해당 row( or cell) 클릭시 작동
function selectRow(tblRow)
{
var f = document.frmData;
if(selectedIdx != tblRow.rowIndex){ //선택
if(selectedIdx != -1 ){
tblNews.rows[selectedIdx].cells[0].style.backgroundColor="white";
}

f.cellHtml.value = tblRow.cells[0].innerHTML;
tblRow.cells[0].style.backgroundColor="#CCFFCC";
selectedIdx = tblRow.rowIndex;
tblEventInit();
}else{ //선택해제
selectedIdx = -1;
tblRow.cells[0].style.backgroundColor="white";
document.frmData.cellHtml.value="";
}

}

function tblMouseOver(tblRow){
if(tblRow.rowIndex != selectedIdx){
tblRow.cells[0].style.backgroundColor="silver";
}
}

function tblMouseOut(tblRow){

if(tblRow.rowIndex != selectedIdx){
tblRow.cells[0].style.backgroundColor="white";
}
}

function tblEventInit()
{
//셀 이벤트 초기화
var len = tblNews.rows.length;
for(var i = 0 ; i < len ; i++){
tblNews.rows[i].onmousedown = function(){selectRow(this)}
tblNews.rows[i].onmouseover = function(){tblMouseOver(this)}
tblNews.rows[i].onmouseout = function(){tblMouseOut(this)}

}
}

function init()
{
tblEventInit();//셀 이벤트 초기화
}

function printDate(t)
{
var txt = document.all[t.name + "Text"];
var time = t.value;
// alert(time);
if(time.length>0){
txt.innerHTML = time.substring(0,4) + "년";
}

if(time.length>4){
txt.innerHTML += " " +  time.substring(4,6) + "월";
if( time.substring(0,4) > 2300 ||  time.substring(0,4) < 1800){
txt.innerHTML = "<font color=red>1800~2300년 사이로 넣어주세요.</font>";
return "";
}
}

if(time.length>6){
txt.innerHTML += " " + time.substring(6,8) + "일";
if( time.substring(4,6) > 12 ||  time.substring(0,4) < 1){
txt.innerHTML = "<font color=red>01~12월 사이로 입력해주세요.</font>";
return "";
}
}

if(time.length>8){
txt.innerHTML += " " + time.substring(8,10) + "시";
if( time.substring(6,8) > 31 ){
txt.innerHTML = "<font color=red>1~31일 사이로 입력해주세요</font>";
return "";
}
}

if(time.length>10){
txt.innerHTML += " " + time.substring(10,12) + "분";
if( time.substring(8,10) > 23){
txt.innerHTML = "<font color=red>0시~23시 사이로 입력해주세요</font>";
return "";
}
}

if( time.length ==12 && time.substring(10,12) > 59  ){
txt.innerHTML = "<font color=red>0분~59분 사이로 입력해주세요</font>";
return "";
}


return true;
}

function check(mode)
{
var newsText
var f = document.frmData;

if(tblNews.rows.length < 1) alert('작성된 뉴스가 없습니다');
else if(!f.title.value)void(alertFocus('제목을 입력해주세요. 각 뉴스 셋을 구분하는 이름으로 사용됩니다.',f.title));
else if(f.sdTime.value.length != 12)void(alertFocus('게시 시작 일시의 형식이 잘못되었습니다',f.sdTime));
else if(f.edTime.value.length != 12)void(alertFocus('게시 종료 일시의 형식이 잘못되었습니다',f.edTime));
else if(f.edTime.value < f.sdTime.value)void(alertFocus('게시 종료 일시는 시작일시보다 과거가 될수없습니다',f.edTime));
else{

for(var i = 0 ; i < tblRowLimit ; i ++){ //히든폼에 데이터 세팅
newsText = f["newsTxt" + (i + 1) ];
if(tblNews.rows[i]){
newsText.value = tblNews.rows[i].cells[0].innerHTML;
}else{
newsText.value = "";
}
}

f.mode.value=mode;
f.action = "Action.asp";
f.target =  "frmAction";
f.submit();
}
}

//alert 후 focus 이동후 false return;
function alertFocus(alertMsg,focusForm)
{
alert(alertMsg);
focusForm.focus();
return false;
}
//키보드 입력시 숫자 이외의 키를 누를 경우 false 를 리턴한다.
function isNum(e){
//alert(event.keyCode);
if ((event.keyCode >= 45 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8|| event.keyCode==13 || event.keyCode==9) return true;
else return false;

}
</script>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red" onLoad=init()>
테이블 셀 innerHTML 컨트롤 예제
<form name=frmData onSubmit="return false" method="post">
<input type=hidden name="mode" value="">
<input type=hidden name="no" value="">
<input type=hidden name="newsTxt1" value="">
<input type=hidden name="newsTxt2" value="">
<input type=hidden name="newsTxt3" value="">
<input type=hidden name="newsTxt4" value="">
<input type=hidden name="newsTxt5" value="">
<input type=hidden name="newsTxt6" value="">
<input type=hidden name="newsTxt7" value="">
<input type=hidden name="newsTxt8" value="">
<input type=hidden name="newsTxt9" value="">
<input type=hidden name="newsTxt10" value="">

<table border="1" width="700" align="center" cellspacing="0" bordercolordark="white" bordercolorlight="black">
    <tr>
        <td width="196" valign="bottom">
<table border="0" cellspacing="0" cellpadding="0" width="180" align=center id="tblNews" style="border-width:1px; border-style:dotted;">
      <tr>
        <td ><img src="http://ulgom.net/image/logobysong.gif" ></td>
    </tr>
</table>
<p></p>
<input type=button name=btnSave value="수정사항저장" onClick="check('edit')">
<input type=button name=btnSave value="새이름으로 저장"  onClick="check('new')">
</td>
        <td width="44" >
<input type="button" value="↑↑" onClick="upRow()"><br><br>
<input type="button" value="↓↓" onClick="downRow()"><br><br>
<input type="button" value="삭제" onClick="clearRow()">
</td>
        <td width="438" >
제목 : <input type=text name=title value="" size="46">
<br>시작일시 : <input type=text name=sdTime maxlength=12 size=12 value="" onKeyDown="return isNum(event)" onKeyUp="return printDate(this)">
<font  id="sdTimeText" ></font>
<br>종료일시 : <input type=text name=edTime maxlength=12 size=12 value="" onKeyDown="return isNum(event)" onKeyUp="return printDate(this)">
<font id="edTimeText"></font>
<br><font color=red>날짜는 분단위 까지 숫자로만 입력합니다
<br>(예 : 2005년 1월 1일 오후 2시 5분 : 200501011405</font>
            <textarea name=cellHtml rows="7" cols="44"></textarea><br>
<input type=button value="수정" name=btnSave onClick="updateTblRow()" ><input type=button value="추가" name=btnNew onClick="insertNewRow(this.form.cellHtml.value)">
</td>
    </tr>
</form>
</table>
<center>
<!--- newsList 용 iframe --->
<iframe name=frmNewsList  width=680 height=300 frameborder=0></iframe>
<!--- newsList 용 iframe --->
</center>
</body>
<!----DB 컨넥션용 Target Iframe--->
<iframe name="frmAction"  width=0 height=0></iframe>
<!----DB 컨넥션용 Target Iframe--->
</html>

 

출처 : http://ulgom.net/gomsboard/view.html?t_nm=java_tip&idx=175

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3195 바탕화면 아이콘 변경 M 최고의하루 12.23 4063
3194 오라클(Oracle) 날짜 관련 함수 정리 13 김영철 01.23 4061
3193 innerTEXT와 innerHTML의 유용함 99 단국강토 02.09 4050
3192 각종 확장자 파일 M 최고의하루 12.24 4032
3191 오라클 캐릭터 셋 변경 M 최고의하루 01.12 4029
3190 이것은 AI파일 미리보기입니다. 댓글2 M 최고의하루 01.15 4029
3189 Ajax 간단한 예제(우편번호검색) 13 김영철 01.29 4021
3188 포토샵으로 털그리기 10 액션쟁이 01.02 4020
3187 php 설치관련 문의내용 정리 13 김영철 01.14 4015
3186 vb 마우스휠 2 아론k 06.24 4014
3185 UltraWebGrid Tips 99 단국강토 01.13 4009
3184 PHP 답변형 게시판 / 자료실 /PHP강좌 13 김영철 01.13 3994
3183 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 3985
3182 엑셀형식 가계부 3종 댓글2 2 비비드바비 04.29 3960
3181 Windows Server 2003 에서 IIS 6 + PHP 4.3.2 설정법 M 최고의하루 12.19 3959
3180 간편 스크롤캡쳐프로그램!!!! 2 무라사키 02.17 3953
3179 rsync윈도우에서 리눅스로 백업하기 13 김영철 01.29 3952
3178 award bios 어워드 바이오스 설정법 M 최고의하루 12.18 3943
3177 아쿠아버튼 M 최고의하루 12.20 3937
3176 innerText, outerText, innerHTML, outerHTML 99 단국강토 01.06 3937
3175 ScriptX 프린트 13 김영철 01.15 3932
열람중 table,tr,td 의 innerHTML 속성으로 좀 가꾸놀기 99 단국강토 02.09 3924
3173 원격데스크톱 연결 (XP) M 최고의하루 12.20 3923
3172 MSSQL 내장 함수 목록 99 단국강토 01.03 3920
3171 꽤 괜찮다; - MMF 변환 프로그램 M 최고의하루 12.18 3920
3170 AJAX 관련 새로운 url 정리 13 김영철 01.29 3909
3169 MSSQL 기본 접속 포트 1433 변경 및 서버 alias 사용 99 단국강토 01.07 3908
3168 frame, iframe에서 쿠키, 세션 인증(로그인) 처리 안 될 때 해결 방법 13 김영철 01.14 3905
3167 네이트온글꼴바꾸기 댓글1 17 미니 04.27 3901
3166 Window에서 4G 이상의 메모리가 인식이 안될때 17 vane 12.27 3876
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취