제가 그때 살펴봤던 바로는 getElementById를 쓰고 있음에도 실제로 id가 있는 element는 하나도 없었습니다. -_-;
(사실 전송할 때 중복체크용 hidden input 태그를 검사하는 것은 Firefox에서 알아서 name 속성으로 호환 처리를 해주는데, 위에서 중복확인 버튼을 눌렀을 때 hidden input 태그로 값 설정이 안 되는 게 문제입니다.)
그리고 이런 버그를 고쳤더라도 폼 데이터를 왜 서버에서 못 받는지도 확인이 필요할 것 같네요.
일단 제가 생각하는 바를 말해보면,
- 불필요한 프레임 사용을 모두 제거해서 단일 페이지로 만든 다음, 중복체크 용도로 쓰이는 hidden input 태그에 적당한 id를 부여하는 방식으로 고쳐야 할 것 같습니다.
(이 설문조사 페이지에서 왜 iframe이나 frame 사용이 필요한지 전혀 모르겠습니다.)
- form 태그에 action="javascript:..." 이렇게 쓰는 건 올바로 사용하는 방법이 아닙니다. action은 서버측 주소를 지정하는 게 맞고, javascript를 이용한 필드값 validation을 하고 싶다면 onsubmit 이벤트에 함수를 걸어서 return true/false로 판정을 내리도록 해야 합니다.
(현재는 javascript로
f.action = "./survey_update.php";
f.submit();
와 같이 처리하고 있는데 이렇게 사용하는 건 접근성 측면에서 권장되지 않는 방법입니다.)
게다가 javascript의 경우 웹브라우저에서 꺼버릴 수 있기 때문에, 중복 확인과 같이 critical한 부분은 최종적으로 서버에서 검사를 하는 것이 가장 좋습니다. (굳이 중복확인을 미리 클릭하게 할 필요 없이, 서버에서 최종적으로 submit 받았을 때 검사해서 중복이 아니면 받아들이고, 중복이면 다시 뒤로 가게 하거나 사용자가 입력했던 폼 데이터를 그대로 보존한 채 다시 폼을 출력해주는 방법을 쓰는 게 더 나을 것 같습니다)
HTML까지 표준에 다 맞춰야 된다거나 table 대신 css 기반 레이아웃을 써야 한다거나라고 부탁드리고 싶진 않지만, javascript 쪽에 관련된 문제는 사이트 이용을 할 수 있느냐 마느냐 하는 문제와 연결되기 때문에 올바로 사용하는 것이 중요합니다. (원래는 js가 없어도 이용이 가능하도록 하는 것이 좋지요.)
ps. 중복된 사이트가 발견되고 있다는 공지가 위에 뜬 것을 보았는데, 역시 클라이언트 사이드에서만 검사를 하면 악의를 가진 사용자가 충분히 중복된 주소로 넣을 수 있게 되어 있는 구조입니다. javascript에 너무 의존하지 않는 것이 좋습니다.
참조 :
http://hyeonseok.com/docs/accessible-javascript/