테스트 사이트 - 개발 중인 베타 버전입니다

체크박스 다중체크 필수 유효성 폼메일 질문드립니다 채택완료

버스커즈 1년 전 조회 6,618

아래는 폼메일에 적용된 체크박스 입니다

 

그룹1

<input type='checkbox' id='a1' name='a1[]' value='선택1'>

<input type='checkbox' id='a1' name='a1[]' value='선택2'>

 

그룹2

<input type='checkbox' id='a2' name='a2[]' value='선택1'>

<input type='checkbox' id='a2' name='a2[]' value='선택2'>

 

그룹3

<input type='checkbox' id='a3' name='a3[]' value='선택1'>

<input type='checkbox' id='a3' name='a3[]' value='선택2'>

 

위 체크박스 각 그룹에서

필수 1개씩 무조건 선택하도록 하고싶는데요

 

 

아래는 검색해서 나온 답변중에서 적용해봤는데

그룹1은 잘 되는데

그룹2..그룹3은 어떤식으로 확장해서 추가해야하는지

여러가지방법을 해봐도 잘 안되네요

 

고수님들 도와주세요!

감사합니다!

 

 

-JavaScript-

function chkMailFrm(f) {
  var checked = document.querySelectorAll('[name="a1[]"]:checked');
  if ( !checked.length ) {
    alert("체크박스 하나 이상 선택해주세요.");
    return false;
  } 
  return true;
}

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
R
1년 전

</p>

<p><form></p>

<p>  <div>그룹1</div></p>

<p>  <div>그룹2</div></p>

<p>  <div>그룹3</div></p>

<p></form></p>

<p>

</p>

<p><script></p>

<p>const form = document.querySelector('form');</p>

<p> </p>

<p>form.addEventListener('submit', (event) => {</p>

<p>  // 각 그룹의 체크박스가 선택되었는지 확인</p>

<p>  const groups = document.querySelectorAll('div');</p>

<p>  for (const group of groups) {</p>

<p>    const checkedBoxes = group.querySelectorAll('input[type="checkbox"]:checked');</p>

<p>    if (checkedBoxes.length === 0) {</p>

<p>      alert('각 그룹에서 최소 하나의 체크박스를 선택하세요.');</p>

<p>      event.preventDefault(); // 폼 제출 중단</p>

<p>      return;</p>

<p>    }</p>

<p>  }</p>

<p>});</p>

<p></script></p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

1년 전

다음 코드가 도움이 될지 모르겠습니다.

 

</p>

<p><style>

input[type="checkbox"][name$="\[\]"]:focus {

  outline: 0.2em dashed gray;

  outline-offset: 0.2em;

}

</style></p>

<p> </p>

<p><script>

function chkMailFrm(f) {

  // var checked = document.querySelectorAll('[name="a1[]"]:checked');

  // if ( !checked.length ) {

  //   alert("체크박스 하나 이상 선택해주세요.");

  //   return false;

  // } 

  // return true;</p>

<p>

  let passed = true;</p>

<p> </p>

<p>  const chk_name_map = {};

  f.querySelectorAll('input[type="checkbox"][name$="\[\]"]').forEach((el, i) => {

    const el_name_prefix = el.name.substring(0, 2);

    if (chk_name_map[el_name_prefix] == null) {

      chk_name_map[el_name_prefix] = [];

    }

    chk_name_map[el_name_prefix].push(el);

  });</p>

<p> </p>

<p>  for (const [k, arr] of Object.entries(chk_name_map)) {

    let chkd = false;

    for (let i = 0, i_len = arr.length; i < i_len; i++) {

      if (arr[i].checked == true) {

        chkd = true;

        break;

      }

    }</p>

<p> </p>

<p>    if (chkd == false) {

      passed = false;

      alert(k + ' group need a choice');

      arr[0].focus();

      break;

    }

  }</p>

<p> </p>

<p>  if (passed == false) {

    return false;

  }</p>

<p> </p>

<p>  return true;

}

</script></p>

<p> </p>

<p><form onsubmit="return chkMailFrm(this)"></p>

<p>그룹1

<input type='checkbox' name='a1[]' value='선택1'>

<input type='checkbox' name='a1[]' value='선택2'>

 </p>

<p>그룹2

<input type='checkbox' name='a2[]' value='선택1'>

<input type='checkbox' name='a2[]' value='선택2'>

 </p>

<p>그룹3

<input type='checkbox' name='a3[]' value='선택1'>

<input type='checkbox' name='a3[]' value='선택2'></p>

<p>

<button type="submit">submit</button>

</form></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

버스커즈
1년 전
답변감사합니다! 바로 적용해 봤는데요.
그룹1은 체크가 없으면 체크하라고 검사를 하지만
그룹2, 그룹3은 체크가 없는데도 체크하라고 경고창 안뜨고 바로 전송이 되네요
제가 뭘 놓친건지 어렵 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인