묻고답하기
자바스크립트 관련 질문 몇가지 드립니다^^.
2012.01.18 23:02
어떻게 하다 보니 방명록을 개조한 신청서가 완성이 되어져 가고 있습니다.
이제 마지막 관문에 도달하였는데요,
다른 부분들은 전부 board 모듈의 확장변수를 통해 등록했지만,
한부분은 연동 셀렉트 박스가 필요하여,
자바스크립트를 통해 선택 가능하게 만들었습니다.
소스는 아래와 같습니다.
게시판관리에 게시판정보에
상단내용에 입력할 내용
============================================================================================
<script type="text/javascript">
var selectB1 = [{"text":"스팀살균 손세차 - 15,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 90,000원","value":"B"},{"text":"특수코팅 - 90,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 170,000","value":"D"},{"text":"월세차 - 50,000원","value":"D"}];
var selectB2 = [{"text":"스팀살균 손세차 - 20,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 110,000원","value":"B"},{"text":"특수코팅 - 110,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 200,000","value":"D"},{"text":"월세차 - 70,000원","value":"D"}];
var selectB3 = [{"text":"스팀살균 손세차 - 25,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 130,000원","value":"B"},{"text":"특수코팅 - 130,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 220,000","value":"D"},{"text":"월세차 - 90,000원","value":"D"}];
var selectB4 = [{"text":"스팀살균 손세차 - 27,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 140,000원","value":"B"},{"text":"특수코팅 - 140,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 250,000","value":"D"},{"text":"월세차 - 100,000원","value":"D"}];
var selectB5 = [{"text":"스팀살균 손세차 - 30,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 150,000원","value":"B"},{"text":"특수코팅 - 150,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 270,000","value":"D"},{"text":"월세차 - 110,000원","value":"D"}];
var selectB6 = [{"text":"스팀살균 손세차 - 35,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 190,000원","value":"B"},{"text":"특수코팅 - 220,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 330,000","value":"D"},{"text":"월세차 - 130,000원","value":"D"}];
var selectB7 = [{"text":"스팀살균 손세차 - 25,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 150,000원","value":"B"},{"text":"특수코팅 - 150,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 270,000","value":"D"},{"text":"월세차 - 90,000원","value":"D"}];
var selectB8 = [{"text":"스팀살균 손세차 - 30,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 170,000원","value":"B"},{"text":"특수코팅 - 170,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 300,000","value":"D"},{"text":"월세차 - 110,000원","value":"D"}];
var selectB9 = [{"text":"스팀살균 손세차 - 35,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 190,000원","value":"B"},{"text":"특수코팅 - 190,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 330,000","value":"D"},{"text":"월세차 - 130,000원","value":"D"}];
var selectB10 = [{"text":"스팀살균 손세차 - 40,000원","value":"A"},{"text":"실내클리닝 + 스팀살균 외부세차 - 210,000원","value":"B"},{"text":"특수코팅 - 210,000원","value":"C"},{"text":"실내클리닝+특수코팅 - 350,000","value":"D"},{"text":"월세차 - 150,000원","value":"D"}];
function ChangeSelectB(selectA)
{
var value = selectA.value;
var selectBArray = eval("selectB"+value);
// selectB 셀렉트 박스에 들어갈 변수를 가져올 수 있다.
// eval 은 변수이름으로 객체를 가져오는 용도로 사용.
try
{
// DOM 방식을 사용하여 selectB 셀렉트 박스 객체를 얻어온다.
// id를 사용해 가져오기 위해서 getElementById 메소드를 사용
var oSelectB = document.getElementById("selectB");
//selectB 셀렉트 박스의 하위 엘리멘트를 삭제한다.
while(0 < oSelectB.childNodes.length)
{
oSelectB.removeChild(oSelectB.firstChild);
}
var option = null;
// 새로운 option을 selectB 셀렉트 박스에 추가해 준다.
for (var index=0; index < selectBArray.length ;index++ )
{
option = document.createElement("option");
option.value = selectBArray[index].value;
// TextNode를 생성하여 option 객체의 하위 객체로 추가해 준다.
option.appendChild(document.createTextNode(selectBArray[index].text));
// selectB 셀렉트 박스에 option 객체를 추가한다.
oSelectB.appendChild(option);
}
}
catch (e)
{
alert(e.description);
}
}
</script>
=======================================================================
출력할 부분에 입력 내용.
<select name="selectA" id="selectA" onchange="ChangeSelectB(this);" >
<option value="1" selected = "selected">경차</option>
<option value="2">소형차</option>
<option value="3">중형차</option>
<option value="4">중대형차</option>
<option value="5">대형차,SUV</option>
<option value="6">승합차(7인승)</option>
<option value="7">소형수입차</option>
<option value="8">중형수입차</option>
<option value="9">대형수입차,SUV</option>
<option value="10">수입승합차</option>
</select>
<select name="selectB" id="selectB" style="rtl">
<option value="A">스팀살균 손세차 - 15,000원</option>
<option value="B">실내 크리닝+스팀살균 외부세차- 90,000원</option>
<option value="C">특수코팅 - 90,000원</option>
<option value="D">실내크리닝+ 특수코팅 - 170,000원</option>
<option value="E">월세차 - 50,000원</option>
</select>
위 소스가 작동은 잘 합니다.
다만... 제가 너무 초초보라서 selectB에서 받은 값을 제 DB에 저장을 해야되는데.... 할 줄을 모르겠습니다.
아무것도 모르는 초초보적 생각으로 구상해본 연동방법은 다음과 같습니다.
확장변수C를 만든다.
글 쓰기할때는 확장변수C 부분을 숨켜 보이지 않게 한다.
글 등록 할때 selectB 에서 받은 값을 확장변수C에 대입하여 저장한다.
글 볼때엔 확장변수C를 정상적으로 보여지게 한다.
저렇게 할 수 있을까요?
할 수 있다면 어떻게 해야될까요?
만약 안된다면 어떠한 방식으로 선택된 selectB의 값을 DB에 저장할 수 있을까요??
너무 초보라서 이상한 질문만 잔득 드리는것 같아 죄송합니다,
열심히 공부는 하고 있는데 워낙 이분야에 무지한지라. .ㅠㅠ
댓글 2
-
송동우
2012.01.18 23:42
-
박민하323
2012.01.19 00:13
정말 소중한 답변 너무 감사드립니다. 하나만 더 질문 드리겠습니다. 송동우님께서 주신 예제를 통해 돌아가는 구도는 알겠습니다만 display.value = obj.value; 를 하면 option의 value값인 op1,op2등의 값을 얻어오는데, 선택1,선택2 를 얻어오려면 어떻게 해야됩니까? 너무 쉬운 부분이지만 아무런 지식이 없다 보니 이런부분에서도 햇갈리내요 -
송동우
2012.01.19 00:20
제가 제대로 이해했는지 모르겠지만
<option value="선택1">선택1</option>
이런식으로 하면 됩니다.
-
박민하323
2012.01.19 00:35
아하! value의 값이 한글이어도 상관이 없는군요! 너무너무 감사합니다. 덕분에 너무 쉽게 해결할수 있는것 같습니다. 감사합니다^^
간단한 예제 :
<script type="text/javascript">
function chk(obj)
{
var display = document.getElementById("box");
display.value = obj.value;
}
</script>
<select name="sel" onChange="chk(this)">
<option>선택하세요</option>
<option value="op1">선택1</option>
<option value="op2">선택2</option>
<option value="op3">선택3</option>
</select>
<br />
<label for="box">확장변수</label>
<input type="text" id="box" name="box" readonly="readonly" />
이 내용을 html 페이지에 테스트 해 보세요.....
해보시면 아시겠지만
자바스크립트로 처리한 값이
확장변수 란에 onChange 될때 나타납니다.
물론 그 확장변수칸은 소스를 좀 수정해서 readonly="readonly"를 추가해 주면 글 작성자가 수정을 못하겠죠
그러면 확장변수는 선택에 의해 자동으로 값이 입력되고
글은 쓰고 등록을 하면 됩니다.