익스플로어11 브라우저에 맞게 코딩하다가 발견한 또하나의 불편한 사실... 블록

아래는 폼값을 전달하기 전에 유효값을 체크하는 함수인데 익스플로어8과 크롬 파폭에선 엘러먼트가 하나이거나 여러개이거나 상관없이 getElementsByName 을 사용하여 배열로 처리하면 됐는데 익스플로어11에선 아래와 같이 엘러먼트가 한개일 때의 상황을 getElementById로 별도 처리 해줘야 한다는 사실이다. 쓸데없이 코드를 길게 만드는 염병(?)인 것이다. 이렇게 처리하지 않으면 자바스크립트 오류가 뜨기 때문에 매우 불편하다. 개발자 여러분들은 이 상황을 어떻게 생각하시는지...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// JavaScript Code
function datachk2(no)
{
    if(no>0) {
        var rMode = document.getElementsByName('mode[]')[no];
        var rDate = document.getElementsByName('regdate[]')[no];
        var rNum = document.getElementsByName('num[]')[no];
        var rName2 = document.getElementsByName('name2[]')[no];
    } else {
        var rMode = document.getElementById('mode[]');
        var rDate = document.getElementById('regdate[]');
        var rNum = document.getElementById('num[]');
        var rName2 = document.getElementById('name2[]');
    }
    if(rMode.value=="입고입력"||rMode.value=="출고입력") {
        if(!rDate.value) {
            alert("날짜를 입력해 주세요");
            rDate.focus();
            return false;
        } else if(!rNum.value||isNaN(rNum.value)) {
            alert("권수를 입력해 주세요");
            rNum.focus();
            return false;
        } else if(!rName2.value) {
            alert("거래처를 입력해 주세요");
            rName2.focus();
            return false;
        }
        if(no>0) {
            for(i=0;i<no;i++){
                document.getElementsByName('regdate[]')[i].disabled = false;
                document.getElementsByName('stat[]')[i].disabled = false;
                document.getElementsByName('num[]')[i].disabled = false;
                document.getElementsByName('name2[]')[i].disabled = false;
                document.getElementsByName('memo[]')[i].disabled = false;
            }
        } else {
            document.getElementById('regdate[]').disabled = false;
            document.getElementById('stat[]').disabled = false;
            document.getElementById('num[]').disabled = false;
            document.getElementById('name2[]').disabled = false;
            document.getElementById('memo[]').disabled = false;
        }
    } else {
        alert("Error!");
        return false;
    }
}

덧글

  • Hide_D 2014/12/09 15:30 # 답글

    아.... html태그에서 <input name="이름"> 이 아니고 <input id="이름">으로 쓰고 있나 보네요 -_-;;
    해당 방법의 경우 원래부터 'getElementById'가 맞고, getElementsByName이 비표준이며, 잘못된 사용방식입니다.
    doctype을 html5, 아니면 적어도 xhtml로 지정하면 크롬에서도 "당연히" 비표준 지원을 하지 않으니 동작하지 않는걸 확인할 수 있습니다.

    ... 그보다 getElementById, getElementByName의 사용법을 다시 공부하시는 걸 추천합니다.
    getElementById가 필요한 경우가 있고, getElementByName가 필요한 경우가 있는데 둘의 구분을 하지 못한 상태로 쓰고 있는듯 하네요.
  • 희망의빛™ 2014/12/09 15:35 #

    근데 IE11에서 배열을 불러올 때는 getElementById 를 사용할 수가 없으니 getElementsByName 을 쓸 수밖에 없지요. 그러다 보니 이렇게 코드가 길어질 수밖에 없는거 아니잖습니까? input 태그는 name 과 id를 둘 다 지정해 사용했습니다. id="name[]" name="name[]" 이런 식으로 while 문을 돌려 배열로 폼 엘러먼트를 사용하는 방법을 사용했습니다.
  • Hide_D 2014/12/09 15:33 #

    이상한 사용 방식이네요.
    아래에 적은대로 id, name, class 등의 DOM 요소에 대해서 공부해보세요.
  • asdasd 2014/12/09 15:52 # 삭제 답글

    웹프로그래밍 하기 전에 DOM의 기본개념부터 익히고 오시기 바랍니다...
    기초가 부족하면 이런 쓸데 없는 부분에서 삽질하기가 쉽죠.
  • 오오 2014/12/09 16:44 # 답글

    개발자 여러분들은 이 상황에서...

    도큐먼트부터 살펴보고 내가 어디 잘못했나 고심하면서

    ...옛날부터 jQuery를 사용하겠죠.
  • 우사밍 2014/12/09 17:26 # 삭제 답글

    그런데 진지하게 이 사람이 개조했다는 제로보드4 받아쓰는 사람이 있긴 있음?
  • 우사밍 2014/12/09 17:27 # 삭제 답글

    써보고 툭하면 뻗고 호환성이슈 생기고 근데 개발자라는 건 뭐가 잘못됐는지 모르고 이러니까 써보려다가도 GG치는걸로 아는데
  • Hide_D 2014/12/09 17:43 #

    그정도까지 써보신분이 있나요 ;;;
  • 희망의빛™ 2014/12/09 20:33 #

    써보세요. 좋습니다. 후회 안하실 겁니다. 자타가 인정하는 완성도를 가지고 있죠. 물론 본문은 게시판이 아니라 다른 작품 중 일부지만 말입니다. ^^;
  • 지가나다 2014/12/09 21:37 # 삭제

    자타가 인정...? 자는 그렇다 치고 타는 대체 누가 인정했다는 건지?
  • 희망의빛™ 2014/12/09 21:53 #

    제 사이트에서 한 설문조사에서 언뜻 여론이 나타나더군요. ^^;
  • 총통 R 레이퍼 2014/12/10 15:28 #

    여보세요? 거기 지구권이 아니라면서요?
  • ?? 2014/12/09 22:35 # 삭제 답글

    -_-; 설문조사 중복투표가 되는데 이건 대체 어떻게 된....???
  • ?? 2014/12/09 22:36 # 삭제

    중복투표 뻔히 되는데 바로 밑에 검증된 설문조사라고 텍스트문구뜨는게 소름돋는다;;
  • windily 2014/12/09 23:13 # 답글

    jQuery를 조금씩 도입해 보시는 건 어떨까요?
    http://jquery.com/
  • 드릴러 2014/12/09 23:27 # 삭제 답글

    이 분의 글에 아무 댓글이 달리지 않을 날이 오기를

    다른 분들은 물론이고 이 글을 쓴 본인도 사실 마음 깊숙한 곳에서는
    그렇게 바래마지 않을까 싶네요.

    부디. 제발.
    저도 참다참다 처음이자 마지막으로 댓글 씁니다.
    눈이 아플라 그럽니다.

    장님 코끼리 만지듯이 물어물어 더덕더덕 만들지 말고
    그냥 기초공부부터 하셨으면 합니다.

    남과 본인 그 모두를 위해서.
  • 란에드린 2014/12/10 10:06 # 답글

    아 예 좋다 보통 안좋다가 아니라 좋다 조금좋다 아주 조금 좋다 그냥 괜찮다 이런식으로 부정이 하나도 없는 설문조사도 설문조사겠지
  • Miyun_86 2014/12/10 11:17 # 삭제

    그냥 자기 싫은 소리는 듣기 싫어하는 전형적인 사람이죠, 뭐.
    전부터 진지하게 뭘 이야기해도 자기 주장이 무조건 맞다고 우기는 인간에게 저런 왜곡된 설문조사만이 자신에게 당위성을 부여할 수 있으니 저러겠습니다만...
  • 총통 R 레이퍼 2014/12/11 12:08 #

    심지어 중복투표 가능ㅋㅋㅋㅋㅋ
  • 희망의빛™ 2014/12/11 20:03 #

    중복 투표 문제 방금 해소했네요. ^^; 한번 해보세요.
  • 다들 좀 진정하시고 2014/12/10 14:28 # 삭제 답글

    그냥 이렇게 댓글하며 내버려 두세요.
    희망의 빛 이라는 사람. 이거 말고는 할 수 있는 것도 할 줄 아는 것도 불러주는 사람도 없습니다.
    취업도 하다못해 119pc수리 창업도 힘든 사람인 거 다들 아시면서.
    여러분의 관심이 한 사람을 그래도 살리고 있어요.
    혼자 우울해하다 죽는 것보다는 사는 게 낫잖아요.
  • 개발자 2014/12/11 07:01 # 삭제 답글

    개발자 망신 시키지 마시고 그냥 혼자 집에서 만드세요.
  • 희망의빛™ 2014/12/13 19:20 # 답글

    제가 최근에 상기 알고리즘을 IE11에서 다시 확인해 봤더니 단일 엘러먼트도 getElementsByName 을 사용해 배열로 불러와지더군요. 언제 그새 수정이 됐는지 모르겠지만 정말로 이상한 일이네요. ㅎㅎ
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색