채택완료

자바스크립트 질문입니다.

2018-12-26 (수) 16:41:43 2,060
Copy
<form onsubmit="return test_form();">

<input type="hidden" name="test[]" value="">

</form>

 

 

<script>

function test_form() {

  var arr = [1,2,3];

  var test_a = document.getElementsByName('test[]');

  for (var i = 0 i < arr.length; i++) {

     test_a[i].value = arr[$i];

  }

}

</script>

이렇게 했을때 폼값을

$_POST['test'] = array(

 [0] => 1,

 [1] => 2,

 [2] => 3

)

이렇게 받고싶은데 왜에러가 뜨는지 모르겠습니다.

|

답변 3개

채택된 답변
+20 포인트
2018-12-26 (수) 16:48:29

var test_a = document.getElementsByName('test[]'); <-- 이부분을 꼭 name으로 해야 할까요?

var test_a = document.getElementsById('test'); 로 변경하시고

<input type="hidden" name="test[]" id="test" value=""> 이렇게 아이디로 잡아주셔야 우선 input 인식을 하는거구요

POST로 넘겨서 배열로 받고 싶으시다면 지금 보내는 방식 자체가 완전 다른거 같습니다.

Copy
<form method="post" onsubmit="return test_form();">
<input type="hidden" name="test[]" value="">
<input type="hidden" name="test[]" value="">
<input type="hidden" name="test[]" value="">
<button>전송</button>
</form>
 
 
<script>
function test_form() {
  var arr = [1,2,3];
  var test_a = document.getElementsByName('test[]');
  for (var i = 0; i < arr.length; i++) {
     test_a[i].value = arr[i];
  }
  
  return true;
}
</script>

문법에러가 있으시네요

for (var i = 0; i < arr.length; i++) {
     test_a[i].value = arr[i];
}

태그상에서 존재하는 input 값은 1개의 값입니다.

javascript상에서 논리적으로 배열을 선언하고 루프로 수행을 했더라도

html 은 1개만 존재하기때문에

단지 이름의 형태가 배열형인 test[] 일뿐이고

실제로 추가된 사항은 없습니다.

따라서 위와같이 대입을 하면

없는 태그에 값을 대입하려고 하니 오류가 발생합니다.

javascript로 필요한 태그를 추가하신후에

대입하셔야 오류가 안납니다.

https://www.w3schools.com/js/js_htmldom_nodes.asp

를 참고하셔서 처리하시거나

값을 넉넉히 만들어 놓고 처리하시면됩니다.

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