selli
133
2020-12-23 19:06:22 작성 2020-12-23 19:10:36 수정됨
3
242

string으로 던졌는데 왜 object타입에 값은 [object HTMLLIElement] 로 찍힐까요 ....ㅠㅠㅠ


플젝은 자바스크립트, 제이쿼리, 타임리프, 스프링부트 사용중입다...



ajax를 하나 호출하여 성공시 화면을 그리는데요..

그 중 일부코드는 다음과 같아요..

tabListDetails
+= '<ul>'
for (var i = 0; i < response.keyValueDetails.tabLists.length; i++) {
tabListDetails
+= '<li id="ctgTabLists' + i + '" class="nav-tab-item" data-index="' + response.keyValueDetails.tabLists[i].ctgCd+ ' " ' +
'onclick="clickTab(' + patientNo + ', ' + sbjCd + ', this.getAttribute(\'data-index\'), null,' + i + ')">' + response.keyValueDetails.tabLists[i].ctgNm + '</li>'
}

코드 중에서 clickTab() 이라는 함수가 있고 파라미터 값으로 patientNo, sbjCd 등등 던지고 있는데요

사실 patientNo과 sbjCd는 둘다 string 이거든요? 근데 저렇게 파라미터로 넣어서 던지면

받는 쪽에서 patientNo은 숫자형으로 받아지고.. 그래도 어찌됏건 잘 돌아가는데 sbjCd는 타입이 문자열이 아닌 objec타입으로 받아지고 값만 딱 찍어보면 [object HTMLLIElement]가 나와서 제대로 원하는 기능동작을 안해요 ㅠㅠ

왜 자꾸 저런 이상한 타입으로 받아지나요?? 

위 코드에서 for문 위에다가 alert(sbjCd)랑 alert(typeof sbjCd)하면 String 타입에, 원하는 값도 잘 나오거든요....ㅠㅠㅠ


고수님들 도와주세욤... 받는쪽에서 JSON.stringify(sbjCd) 해도 확인해보면 {} 이렇게 나오고 ㅠㅠㅠㅠ

도움을 부탁드려요 .. 어케하면 string으로 던진 sbjCd가 받는쪽에서도 그 값 그대로 받아올수 있나요..ㅠㅠ


0
  • 답변 3

  • 훈마로
    666
    2020-12-23 20:10:35

    저 for 문에서 sbjCd를 console.log로 찍어봐주세요

  • 초보자1212
    2k
    2020-12-23 20:57:05

    그건 object 를 toString 화 시키려고할 때 일어나는 현상으로 버그는 아니에요

    자바스크립트의 이해도가 낮은 상태에선 설명을 드려도 이해하시기 어려울테니 따로 설명을 원하시면 별도로 요청해주시면 참고하실 수 있는 링크를 드릴게요

    그냥 원리보다는 해결책이 먼저 필요하실 것 같아서 말씀드리자면

    객체인 sbjCd 를 + 로 연결해서 넣지마시고 또 다른 인자 값으로 넘기세요

    clickTab(sbjCd + 'hi' + 'bye')

    이런 식보다

    clickTab(sbjCd, "hi" + "bye")

    이렇게 나눠서 넣어서 처리하세요

  • selli
    133
    2020-12-24 16:03:46 작성 2020-12-24 16:08:27 수정됨

    답변 주신게 잘 이해가 안가는데요 ..

    우선 for문 위에

    console.log(sbjCd) 를 찍으면 cbj라는 값,

    그리고 console.log(typeof sbjCd) 를 찍어보면 string이라는 값이 나와요.

    전 객체를 string하려는게 아니구 string을 string으로 그대로 받고 싶을뿐인데

    string이 지멋대로 object로 변환되서 가서 해결을 못하구 있어요 ㅠㅠ



    그리고 

    onclick=clickTab(patientNo, sbjCd, this.getAttribute('data-index'), null, i) 이렇게 파라미터 5개를 

    던지고 있는 상황이거든요. 근데 답변 주신게 +를 연결하지 말라고 하시는데 어떤 식으로 써나가야 하는지 감이 안잡힙니다.. 

    for (var i = 0; i < response.keyValueDetails.tabLists.length; i++) {
    tabListDetails
    += '<li id="ctgTabLists' + i + '" class="nav-tab-item" data-index="' + response.keyValueDetails.tabLists[i].ctgCd+ ' " ' +
    'onclick="clickSpecificTab(patientNo, sbjCd, this.getAttribute(\'data-index\'), null,' + i + ')">' + response.keyValueDetails.tabLists[i].ctgNm + '</li>'
    }

    해결책 듣고 이런 식으로 쓰다는 건가 생각들었는데 이땐 patientNo과 sbjCd가 undefined 되서 나와요 ㅜㅜ 제가 자바스크립트 이해가 많이 부족해서.. 좀만 더 도움을 부탁드려요ㅜㅜ


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