쇼핑몰 카테고리 javascript 코드 포함 재질문
<script type="text/javascript">
function productChange_top(p) {
var o_outer=["PADDING","COAT","JAKET"];
var t_top=["SHIRT","1/2 T=SHIRT","T-SHIRT","HOODY","KNIT"];
var b_bottom=["DENIM","SLACKS","SHORT PANTS","COTTON PANTS"];
var s_shoes=["SNIKERS","BOOTS","LOAFERS"];
var midoption=document.getElementByID("productmiddle");
if (p.value=="O") var m = o_outer;
else if (p.value=="T") var m = t_top;
else if (p.value=="B") var m = b_bottom;
else if (p.value=="S") var m = s_shoes;
mid_option.options.length=0;
var count=1;
var opt = document.createElement("option");
opt.value="";
mid_option.appendChild(opt);
for (x in m) {
var opt=document.createElement("option");
opt.value=p.value+x;
opt.innerHTML=m[x];
mid_option.appendChild(opt);
}
}
function pnumValue() {
var pval=productChange_top.value;
document.getElementById('pnum').value=pval;
}
</script>
스크립트 부분입니다
<tr>
<td>상품 분류</td>
<td><select name="producttop" id="producttop" class="productselecttop"
onchange="productChange_top(this)" required="required">
<option value="O">OUTER</option>
<option value="T">TOP</option>
<option value="B">BOTTOM</option>
<option value="S">SHOES</option>
<option value="A">ACC</option>
</select>
<select name="pnum" id="product_middle" onchange="pnumValue(this)"
class="productselectmiddle">
</select></td>
</tr>
html 부분입니다 왜 저 옵션들을 누르면 스크립트 부분으로 안 넘어가질까요ㅜㅜ
안녕하세요.
수정할 부분이 너무 많네요..;;
우선 돌아가게끔만 수정했습니다.
- html
<table> <tr> <td>상품 분류</td> <td><select name="producttop" id="producttop" class="productselecttop" onchange="productChange_top(this)" required="required"> <option value="O">OUTER</option> <option value="T">TOP</option> <option value="B">BOTTOM</option> <option value="S">SHOES</option> <option value="A">ACC</option> </select> <select name="pnum" id="productmiddle" onchange="pnumValue(this)" class="productselectmiddle"> </select></td> </tr> </table>- javascript
var o_outer=["PADDING","COAT","JAKET"]; var t_top=["SHIRT","1/2 T=SHIRT","T-SHIRT","HOODY","KNIT"]; var b_bottom=["DENIM","SLACKS","SHORT PANTS","COTTON PANTS"]; var s_shoes=["SNIKERS","BOOTS","LOAFERS"]; function productChange_top(p) { var mid_option=document.getElementById("productmiddle"); var m; if (p.value=="O") m = o_outer; else if (p.value=="T") m = t_top; else if (p.value=="B") m = b_bottom; else if (p.value=="S") m = s_shoes; mid_option.options.length=0; var count=1; var opt = document.createElement("option"); opt.value=""; mid_option.appendChild(opt); m.forEach(function(x) { var opt=document.createElement("option"); opt.value=p.value+x; opt.innerHTML=x; mid_option.appendChild(opt); }); } function pnumValue(productmiddle) { var producttop = document.getElementById('producttop'); console.log('producttop :', producttop.value); console.log('productmiddle :', productmiddle.value); }크롬에서 개발자 도구 (Ctrl + Shift + I)로 확인해 보면, 아래와 같은 에러가 발생하고 있습니다.
// 아래와 같이 수정하였습니다.
// 왼쪽이 변경 전, 오른쪽이 변경 후 입니다.
1. mid_option, getElementByID, product_middle, m 에 문제가 있어보입니다.
아래의 그림처럼 변경 했습니다.
2. 이쪽은 의도를 잘 몰라서, 주석처리 했습니다. (참고로, 주석을 지우면 에러가 발생합니다)
3. 두번째 셀렉트 박스에는 초기값을 넣어 두시면 됩니다.
// 수정한 전체 소스입니다.
<!DOCTYPE html> <html> <head> <script type="text/javascript"> function productChange_top(p) { var o_outer=["PADDING","COAT","JAKET"]; var t_top=["SHIRT","1/2 T=SHIRT","T-SHIRT","HOODY","KNIT"]; var b_bottom=["DENIM","SLACKS","SHORT PANTS","COTTON PANTS"]; var s_shoes=["SNIKERS","BOOTS","LOAFERS"]; var mid_option=document.getElementById("product_middle"); var m; if (p.value=="O") { m = o_outer; } else if (p.value=="T") { m = t_top; } else if (p.value=="B") { m = b_bottom; } else if (p.value=="S") { m = s_shoes; } mid_option.options.length=0; var count=1; var opt = document.createElement("option"); opt.value=""; mid_option.appendChild(opt); for (x in m) { var opt=document.createElement("option"); opt.value=p.value+x; opt.innerHTML=m[x]; mid_option.appendChild(opt); } } function pnumValue() { //var pval = productChange_top.value; //document.getElementById('pnum').value=pval; } </script> </head> <body> 스크립트 부분입니다 <tr> <td>상품 분류</td> <td> <select name="producttop" id="producttop" class="productselecttop" onchange="productChange_top(this)" required="required"> <option value="O">OUTER</option> <option value="T">TOP</option> <option value="B">BOTTOM</option> <option value="S">SHOES</option> <option value="A">ACC</option> </select> <select name="pnum" id="product_middle" onchange="pnumValue(this)" class="productselectmiddle"> <option value=""></option> <option value="O0">PADDING</option> <option value="O1">COAT</option> <option value="O2">JAKET</option> </select> </td> </tr> </body> </html>안녕하세요,
코드를 확인해보니 오탈자가 있어서 작동이 정상적으로 되지 않는 것으로 보입니다.
수정한 코드와 동작하지 않았던 이유를 적어드립니다
<script type="text/javascript"> function productChange_top(p) { var o_outer=["PADDING","COAT","JAKET"]; var t_top=["SHIRT","1/2 T=SHIRT","T-SHIRT","HOODY","KNIT"]; var b_bottom=["DENIM","SLACKS","SHORT PANTS","COTTON PANTS"]; var s_shoes=["SNIKERS","BOOTS","LOAFERS"]; var mid_option=document.getElementById("product_middle"); // var midoption=document.getElementByID("productmiddle"); // 1. midoption => mid_option : 변수명이 아래와 다름 // 2. getElememtByID => getElememtById : 사용하는 함수명이 틀림 // 3. productmiddle => product_middle : ID 명이 html 부분과 다름 if (p.value=="O") var m = o_outer; else if (p.value=="T") var m = t_top; else if (p.value=="B") var m = b_bottom; else if (p.value=="S") var m = s_shoes; mid_option.options.length=0; var count=1; var opt = document.createElement("option"); opt.value=""; mid_option.appendChild(opt); for (x in m) { var opt=document.createElement("option"); opt.value=p.value+x; opt.innerHTML=m[x]; mid_option.appendChild(opt); } } function pnumValue() { var pval=productChange_top.value; document.getElementById('pnum').value=pval; } </script> 스크립트 부분입니다 <tr> <td>상품 분류</td> <td><select name="producttop" id="producttop" class="productselecttop" onchange="productChange_top(this)" required="required"> <option value="O">OUTER</option> <option value="T">TOP</option> <option value="B">BOTTOM</option> <option value="S">SHOES</option> <option value="A">ACC</option> </select> <select name="pnum" id="product_middle" onchange="pnumValue(this)" class="productselectmiddle"> </select></td> </tr>감사합니다