드롭다운 메뉴로 선택된 값을 wr_subject로 넣기

드롭다운 메뉴로 선택된 값을 wr_subject로 넣기

QA

드롭다운 메뉴로 선택된 값을 wr_subject로 넣기

본문

2949937337_1694762541.2566.png

 

안녕하세요. 이런 드롭다운 메뉴를 만들어서 선택된 값을 게시글의 제목 (wr_subject)로 넣으려고 합니다.

(ex. 제품문의를 선택 후 글 쓰기 → 제목이 제품문의로 나옴)

select나 input을 사용해서 드롭다운 메뉴를 만든게 아니고 임의로 만든거라 자바스크립트로 값을 처리해야하는데 어떻게 해야할지 잘 모르겠습니다 ㅠㅠ

 

2949937337_1694762693.8185.png

 

현상태에서는 게시글에 제목이 아예 나오지 않는 상태입니다. (당연히 리스트페이지에서도 제목이 안나옵니다..)

 

HTML


        <div>
          <p>문의사항</p>
          <label for="wr_subject" class="sound_only">문의사항<strong>필수</strong></label>
          <div class="select" title="문의사항">
            <div class="selected">
              <div class="selected-value">문의사항</div>
              <div class="arrow"></div>
            </div>
            <ul>
              <li class="option">제품 문의</li>
              <li class="option">견적 문의</li>
              <li class="option">기타</li>
            </ul>
        </div>

 

자바스크립트


const selectBoxElements = document.querySelectorAll(".select");
 
function toggleSelectBox(selectBox) {
  selectBox.classList.toggle("active");
}
 
function selectOption(optionElement) {
  const selectBox = optionElement.closest(".select");
  const selectedElement = selectBox.querySelector(".selected-value");
  selectedElement.textContent = optionElement.textContent;
 
  $('input[name=wr_subject]').value(selectedElement);
}
 
selectBoxElements.forEach(selectBoxElement => {
  selectBoxElement.addEventListener("click", function (e) {
    const targetElement = e.target;
    const isOptionElement = targetElement.classList.contains("option");
 
    if (isOptionElement) {
      selectOption(targetElement);
    }
 
    toggleSelectBox(selectBoxElement);
  });
});
 
document.addEventListener("click", function (e) {
  const targetElement = e.target;
  const isSelect = targetElement.classList.contains("select") || targetElement.closest(".select");
 
  if (isSelect) {
    return;
  }
 
  const allSelectBoxElements = document.querySelectorAll(".select");
 
  allSelectBoxElements.forEach(boxElement => {
    boxElement.classList.remove("active");
  });
});

이 질문에 댓글 쓰기 :

답변 5

셀렉트 옵션 함수 처리 부분에 보면 value(selectedElement) 벨류는 속성이지 함수가 아닙니다. 잘못된것 같습니다.

또한 $ 함수를 사용하실려면 var wr_subject_value = $('input[name=wr_subject]').val(); 이렇게 메서드를 정의 하셔야합니다.

function selectOption(optionElement) {
  const selectBox = optionElement.closest(".select");
  const selectedElement = selectBox.querySelector(".selected-value");
  const selectedValue = optionElement.textContent;
  const wrSubjectInput = selectBox.querySelector('input[name="wr_subject"]');
  wrSubjectInput.value = selectedValue;
  selectedElement.textContent = selectedValue;
}
이렇게 해보세요

왜 번거롭게 쓰는지는 모르겠지만

$('input[name=wr_subject]').value(selectedElement);

이게 있는데 안들어간다는거봐서

input name이 wr_subject로된게 없다는거같은데요

input hidden 으로 해서 name = wr_subject 하나 넣어줘보세요


        <div>
          <p>문의사항</p>
          <label for="wr_subject" class="sound_only">문의사항<strong>필수</strong></label>
          <input type="hidden" name="wr_subject" value="<?php echo $selectedElement ?>" id="wr_subject" class="frm_input">
          <div class="select" title="문의사항">
            <div class="selected">
              <div class="selected-value">문의사항</div>
              <div class="arrow"></div>
            </div>
            <ul>
              <li class="option">제품 문의</li>
              <li class="option">견적 문의</li>
              <li class="option">기타</li>
            </ul>
        </div>


이렇게 해보시라는 말씀이실까요..??

쉽게 쉽게 생각하시면

input hidden으로 wr_subject form 안에 넣어두시고

 


$('.option').on('click',function(){
   let chkVal = $(this).text();
   $('input[name=wr_subject]').val(chkVal);
});

하면 될텐데요

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT