728x90

/*

 * function Name:

 *     ListData_chk

 *

 * Description:

 *     두 SELECT Element (dblist_all & dblist_dir)의 item을 교환할 수 있는 스크립트

 * Parameter:

 *     mode: add와 del을 주어서 두 SELECT Element간의 이동 방향을 명시함.

 *         add: ←로 데이터 이동

 *         del: →로 데이터 이동

 *

 * Event:

 *     onClick = "ListData_chk('add')" & onClick = "ListData_chk('del')"

 *

 * Useful:

 *     리스트박스(SELECT Element)는 2개이며 둘 다 다중선택(multiple)을 지원한다.

 *     따라서 HTML소스는 다음의 형태를 취한다.

 *     <tr>

 *        <td><select name="dblist_all" size="10" multiple>...</select></td>

 *        <td><a href=# onClick = "ListData_chk('add')">←</a><br>

 *        <a href=# onClick = "ListData_chk('del')">→</a></td>

 *        <td><select name="dblist_dir" size="10" multiple>...</select></td>

 *     </tr>

 *

 * Bug report:

 *     2005.08.30:

 *         새로운 노드의 생성까지 만들어놓았으나 현재 병합하지 않음.

 *         (블로그 포스트 http://blog.naver.com/jujac/20015976816 참고)

 */


function ListData_chk(mode) {
 var total = MM_findObj('lbl_totaldb_all');
 var aryTempSourceOptions = new Array();
 var aryTempRecOptions = new Array();
 var x=0, y=0;

 if(mode=="add") {
  var odb = document.oform2['dblist_all'];
  var viewdb = document.oform2['dblist_dir'];
 } else {
  var odb = document.oform2['dblist_dir'];
  var viewdb = document.oform2['dblist_all'];
 }

 if(odb.selectedIndex == -1) {
  alert("DB를 선택하지 않았습니다.");
  return false;
 }

 for(var i = 0; i < odb.length; i++) {
  var objTargetValues = new Object();
  objTargetValues.text = odb.options[i].text;
  objTargetValues.value = odb.options[i].value;

  if(odb.options[i].selected) {
   aryTempSourceOptions[x++] = objTargetValues;
  } else {
   aryTempRecOptions[y++] = objTargetValues;
  }
 }

 if(x) {
  if(viewdb.length) vsize = (viewdb.options[0].text)? viewdb.length : 0;
  else vsize = viewdb.length;

  asize = aryTempSourceOptions.length;
  viewdb.length = vsize + aryTempSourceOptions.length;
  for (var i=0; i<vsize; i++) {
   viewdb.options[i].selected = false;
  }
  for (var i=vsize, j=0; i<viewdb.length; i++, j++) {
   viewdb.options[i].text = aryTempSourceOptions[j].text;
   viewdb.options[i].value = aryTempSourceOptions[j].value;
   viewdb.options[i].selected = false;
  }

  odb.length = aryTempRecOptions.length;
  for (var i = 0; i  <odb.length; i++) {
   odb.options[i].text = aryTempRecOptions[i].text;
   odb.options[i].value = aryTempRecOptions[i].value;
   odb.options[i].selected = false;
  }

  total.innerHTML = "Total: " + viewdb.length;
 }
 viewdb.options[viewdb.length-1].selected = true;
}

728x90

'Developer > JavaScript' 카테고리의 다른 글

문자열(value)이 한글인지 아닌지를 체크  (0) 2007.05.02
HTML에서의 progress bar Loading표현  (0) 2007.05.02
이메일 주소 검증  (0) 2007.05.02

+ Recent posts