onnn
80
2019-06-28 10:19:26
5
646

input태그.val() 이 이상한값을 받아옵니다..



이부분에서(스크립트부분) hostSeqId.val 값을 이상한거를 불러오네요


이부분 hidden타입 인풋 박스 값인데 저기서 td안에 넣어서 확인해보면 값을 잘 받아오는데 저 함수부분에서만 이상한 값을 받아오는데.. 뭐가 문제일까요

0
  • 답변 5

  • 원푠듯
    290
    2019-06-28 10:25:01 작성 2019-06-28 10:26:00 수정됨

    undefined가 아니라 이상한 값이라면 인코딩 쪽도 의심해 보셔야 할 거 같아요.


    정확히 어떻게 이상한 값을 불러오는지... 코드만 봐서는 value에 지정된 값을 불러오는 게 맞는데 어떻게 이상하다는 건지 알기가 어렵네요.


    또한 개발자 콘솔에서 해당 input에 value값 제대로 들어가 있는지도 확인해 보시면 좋을 듯해요.

  • onnn
    80
    2019-06-28 10:30:45

    해당 input에는 제대로 value값이 들어갑니다. hostSeqId값이 3,4,9 이렇게 세개가 존재하는데 밑에서는 어떤값을 불러오든 3으로만 찍히네요. 4,9 두개를 선택해도 3,3 이 찍힙니다

  • 사는게힘듭니다
    2019-06-28 10:36:29 작성 2019-06-28 10:41:11 수정됨
  • 원푠듯
    290
    2019-06-28 10:44:09 작성 2019-06-28 10:51:15 수정됨

    hostSeqId 값이 3,4,9이고(리스트가 3번 반복) 어떤 값을 불러와도 3으로만 찍힌다는 건 forEach문에서 Id 값을 중복 지정했기 때문으로 보이네요. 어떤 리스트에서 불러도 첫 번째 input#hostSepId가 호출되는 거죠.


    html은 따로 id가 중복되었을 때 코드를 걸러주는 기능이 없기 때문에, 반복문 돌리실 때 고유 아이디를 부여하시거나, 제이쿼리 코드를 조금 수정하셔야 할 듯합니다.


    $('input[type=checkbox][name=chk]').each(function () {
    var value = $(this).closest('tr').find('input[type=hidden]').val();
    });


    this나 closest를 쓰는 건 별로 좋지 못한 예이긴 하지만 간단하게 수정한다면 저런 식이 될 수 있을 거 같네요.


    jQuery에서 val 메서드를 실행했을 경우 id든 클래스든 가장 첫번째 엘리먼트를 기준으로 값을 불러오기 때문에 저런 문제가 발생한 겁니다.

    jQuery 대신 document.querySelector가 어떤 요소를 반환하는지 실행해 보시면 이해가 쉬우실 거 같네요.

  • guyv
    1k
    2019-06-28 11:03:35

    소스보기 해보세요. 그럼 답이 보입니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.