select 를 사용한 리스트를 가공(?)하다보니, 일단 보관해놔야겠다...싶어서...

...


<script>

function enterText(inputor) {
  if (event.keyCode!=13) return;

  var i, selectList=select1.options, selectedValue, inputText=inputor.value;
  for (i=0; i<selectList.length; i++) if (selectList[i].text==inputText) break;
  if (i>=selectList.length) {
    selectList.add(new Option(inputText, i), i);
    selectedValue=i;
    } else selectedValue=selectList[i].value;

// 버그부분
  select1.value=selectedValue;
  selectList.remove(select1.selectedIndex);
//

  select1.options.add(new Option(inputText, i), 0);

  inputor.value='';
  }
</script>

<input name=inputor onkeypress=enterText(this);><br>
<select name=select1 style="width:200px; height:100px; overflow:auto;" size=2></select>


...







...

간단히(?) 설명하자면,
input 으로 받은 내용을 select 에 option 으로 추가하기위해
기존에 저장해놨는지 찾아보고,

없다면 추가해놓은 후,

한번 삭제한 option 을 가장 위( options.add(..., 0) )로 다시 추가하는 내용.
...으로 만들자 였는데,

사용해보니, OTL... 버그가 있다.

value 에 관련한 index 를 select 가 포함하고 있어서인지 모르겠지만,
하위 값보다 상위 값이 큰 경우, 갑자기 정지하는 문제를 발견...

*test 순서* 1 입력, 2 입력, 3 입력, 1 입력, 2 입력, 3 입력 <- 오류발생

...

for 문이 script 로 구성되어있으면 나중에 느려질 수 있다는 강박관념(?)때문에...
기존의 내용을 value 로 값을 바꾸면 selectedIndex 를 얻을 수 있을 것 같았지만,
index 획득실패가 됐기 때문에(?)...

결국, 처음 구현하려했던 방법으로 다시 복귀


  for (i=0; i<selectList.length; i++) if (selectList[i].value==selectedValue) break;
  selectList.remove(i);


해야했다.

...

OTL... <select 태그 역시 멀고도(?) 험(?)합니다...

NowMark killofki@.

ps... IE 용이라고 태그 넣어둔 것은 event 와 select1, inputor 선언부분때문입니다.
딱히 수정해야할 필요성은 못느껴서 일단 이렇게 남겨둡니다.

Posted by killofki
,