Html & Script

수정화면 출력시 셀렉트 박스 자동 선택 편하게 하기

페이지 정보

본문

수정 폼 코딩하는 것 중에서 셀렉트 박스가 있으면 자동선택하도록 해줘야 하는 부분을
자바스크립트를 이용해서 편하게 하는 방법을 알려드립니다.
물론 아시는 분이 많으시겠지만 모르시는 분들을 위해 적습니다.

일단은 아래와 같은 셀렉트 폼이 있습니다.
<select name="test">
  <option value="">--선택--</option>
  <option value="1">1번</option>
  <option value="2">2번</option>
  <option value="3">3번</option>
  <option value="4">4번</option>
</select>

보통 사용하시는 방법이 출력 내용을 배열에 담고서 루프를 돌리면서 하나씩 값을
비교하여 selected 태그를 출력하여 선택하도록 하거나 항목이 적으면 일일이 if문으로
비교를 하여서 할 것입니다.
아니면 다른 방법으로 <script>document.form.test.value='<?=$row[test]?>'</script>
와 같이 해도 자동으로 선택하도록 할 수는 있습니다.(이 방법도 괜찮으나 입력폼과 수정폼
을 같이 사용할 때는 문제가 됨...값이 없으면 셀렉트 박스가 아무것도 선택안되고 비어버림)

이걸 좀더 편하게 함수로 만들어 사용하도록 하는 방법은...
<script>
function setSelect(obj,value){
    if(value){
      var str = "document.all['"+obj+"'].value = '"+value+"';";
      eval(str);
    }
}
</script>
이런 함수를 하나 선언하고 셀렉트 박스 밑에다가
<script>setSelect("test","<?=$row[test]?>");</script>
이렇게 해주면 자동으로 3번 항목이 선택됩니다.($row[test] = 3일때)

괜히 쓰고 나니 별거아닌거 같네여...^^:


------------------------------------------------------------
저렇게 자바스크립트로 하면 수정확인 버튼을 눌러 submit 을 했다가 여러가지 문제로 다시 document.location.back() 같은걸 하게 됐을때 submit 하기 전의 내용이 아닌 수정을 시작할때의 값으로 리셋되버리지 않나요? 예전에 그런 문제로 저걸 사용 안했던 것 같은데...
-------------------------------------------------------------

selected[$row[test]] ="selected";

<select name=test>
<option value=1 <?echo selected[1]?>>
<option value=2 <?echo selected[2]?>>
</select>

--------------------------------------------------------------

위에 소스랑 비슷한데 제가 쓰는걸 함 올려보져.
디비에서 value와 텍스트 출력부분을 불러온다치거
셀렉트 되어야 할 값이 $sel1, $sel2라고 치면
$sql = "select val, text from sometable order by orderfield";
$result = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result)) {
echo "<select name=test multiple>";
while($row = mysql_fetch_row($result)) {
$selected = (($row[0] == $sel1) || ($row[0] == $sel2))?"selected":"";
echo "<option value='".$row[0]."' $selected >$row[1]</option>";
}
echo "</select>";
}
걍 일케 돌려버립니다. 멀티셀렉트의 경우 선택되는 값이 두개 이상이므로 선택된 값만 배열처리해서 비교처리 해주면 되구요. 위 코딩에는 지금 막코딩한거라서 걍 두개만 설정하구 했슴다. 참고만 하세염.

관련자료

등록된 댓글이 없습니다.
Today's proverb
우리의 꿈은, 뒤에 오는 사람들이 우리를 딛고 우리 위에서 이루게 하는 것입니다. 나는 평생을 창조적인 작업을 위해서 살아왔습니다. 누가 하라고 해서 한 것이 아니라 그것이 나의 삶 그 자체의 즐거움이었기 때문입니다. 현실을 직시하며 현재의 수준을 유지하라. 그리고 더 먼 곳을 향하는 시야를 가져라.