자바스크립트 질문입니다.
본문
<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
var
test_a = document.getElementsByName(
'test[]'
); <-- 이부분을 꼭 name으로 해야 할까요?
var
test_a = document.getElementsById(
'test'
); 로 변경하시고
<input type=
"hidden"
name=
"test[]" id="test"
value=
""
> 이렇게 아이디로 잡아주셔야 우선 input 인식을 하는거구요
POST로 넘겨서 배열로 받고 싶으시다면 지금 보내는 방식 자체가 완전 다른거 같습니다.
태그상에서 존재하는 input 값은 1개의 값입니다.
javascript상에서 논리적으로 배열을 선언하고 루프로 수행을 했더라도
html 은 1개만 존재하기때문에
단지 이름의 형태가 배열형인 test[] 일뿐이고
실제로 추가된 사항은 없습니다.
따라서 위와같이 대입을 하면
없는 태그에 값을 대입하려고 하니 오류가 발생합니다.
javascript로 필요한 태그를 추가하신후에
대입하셔야 오류가 안납니다.
https://www.w3schools.com/js/js_htmldom_nodes.asp
를 참고하셔서 처리하시거나
값을 넉넉히 만들어 놓고 처리하시면됩니다.
<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];
}