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 선언부분때문입니다.
딱히 수정해야할 필요성은 못느껴서 일단 이렇게 남겨둡니다.
'baseJavascript' 카테고리의 다른 글
Array] with() (null)[] 의 효과는 의미없음...?이 아니었다. (0) | 2010.04.23 |
---|---|
select & option] 입력/선택된 값을 꼭대기로 올릴 때...2 (0) | 2010.04.20 |
IE] 한 폴더 내에서 수정한 파일(이미지/스크립트)을 연동해서 보고싶을 때 "다른 이름으로 저장" (0) | 2010.03.06 |
delete 가 실제 메모리에 적용되는 타이밍 (IE 8) (0) | 2010.03.03 |
Array 안쪽의 내용 delete 하기... (0) | 2010.02.18 |