javascript (jQuery) 변수가 여러개의 값을 리턴합니다. 계속 덮어씌워지는 것이 아닌 추가 됩니다.

조회수 899회
var i;
function slide(i){
       //$previewImg 클릭시 변수  i 를 받아와 사용
        console.log(i);
};

$previewImg.on('click', function(){
        i = $previewImg.index(this);
        slide(i);
});

$previewImg 를 클릭할 때 마다 slide 함수에 변수i가 하나의 값이 아닌 클릭했을 때의 새로운i 값이 변수에 추가 됩니다. slide 함수 안에서 마지막 추가 된 변수로 덮어씌우는 방법이 궁금합니다. ㅠㅠ var i = i 와 같이 해결하면 될 줄 알았는데 되지 않네요.

console.log(i)로 확인해보면 첫 줄엔 전에 갖던 변수 i의 값 두번 쨰 줄에 새로운 값이 출력되는데, 새로운 값만 출력되게 하고 싶어요 !!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 올려 주신 전체 소스를 봤는데요... i가 바뀔 수가 없는 상황인데요.

    function slide(i){
      /* 어쩌구 저쩌구... */
      if (!$previewImg.hasClass('active')) {
        $previewImg.children('img').mouseover(function(){
          $(this).addClass('active');
          console.log(i);
        });
        /* 이러쿵 저러쿵... */
      };
    };
    

    이 함수만 놓고 보면 i는 이 함수를 콜할 때 전달하는 값을 그대로 사용하는 것이니 예컨대 slide("666")을 콜하면 콘솔에 666이 찍힐겁니다. 문제는 뭐냐면 slide()가 전체 소스에서 단 한 번 호출되고 이때 i에 값이 단 1번만 할당이 되고 있다는 겁니다.

    이런 상황이거든요.

    1. 페이지가 로딩된다.
    2. 사용자가 검은 box 중 j번째 것을 누른다.
    3. slide(j-1)이 콜된다. (1번째 검은박스의 인덱스는 0이니까)
    4. slide(j-1) 함수 안에서 i = j-1로 고정된 상황이다.
    5. 이제 어느 $previewImgonMouseOver 이벤트를 터뜨려도 콘솔에는 j-1이 찍힌다. (slide(j-1)에 의한 실행이므로)

    필요하신 것이 이 문제 자체의 원인뿐이라면 이게 아마 답이 되었을 것입니다.


    그러면 slide(보여줄슬라이드인덱스) 함수만 잘 고치면 다 해결되느냐? 그렇지 않을 것 같습니다. 애초에 "몇 번째 슬라이드를 보여주느냐"만 임의로 할당해서 넘기는 방식은 이상합니다. 왜냐하면 슬라이딩이라는 건 '지금 보이는' 슬라이드, '보여줄' 슬라이드, '보여졌던' 슬라이드 총 3개 슬라이드가 관여하는 일이거든요. (잘 생각해 보세요.)
    그런 의미에서 그냥 전반적으로 재구축해 보심이 어떨까 합니다. 옛날에 제가 짰던 jquery 슬라이더의 경우엔 몇 번 슬라이더가 지금 떠 있냐를 변수로 저장하지 않고 슬라이드에 클래스 동적 할당으로 처리했는데 (고칠 곳이 한두군데가 아니지만) 이것도 대충 잘 굴러가거든요. 그리고 혹시 지금 이 작업이 공부목적이 아니시라면... 정말 잘나온 플러그인들이 많으니까 찾아서 쓰시고요.

    • 답이 늦어서 죄송합니다 ㅠㅠ 결과는 같습니다. 코드를 보여드리고 도움을 부탁드리고 싶은데 괜찮을까요 ? 알 수 없는 사용자 2019.2.18 14:44
    • 네.. 어디 jsfiddle 같은곳에 데모를 띄워주세요. 전부터 같은 오리지널 슬라이드로 고생하고 계신거 같은데 아무리 생각해도 전체 코딩 계획에 근본 문제가 있다는 생각이 듭니다만... 엽토군 2019.2.18 14:46
    • https://jsfiddle.net/eyqtdrc4/1/ 기본적인 기능만 두고 수정을 하다보니 건드릴게 점점 많아지네요, 이미지 소스는 넣지 않아도 오류가 보이니 이대로 두겠습니다... 검은 box 들을 눌러 보시면 밑 preview 이미지들이 나옵니다, preview 이미지들에 mouseover 를 할때 변수 `i` 를 콘솔 로그에 나오게 해놓았는데, preview이미지 들 중 다른 것을 클릭해 슬라이드가 넘어간 뒤 mouseover를 할때는 `i` 가 겹쳐 클릭한 횟수에 따라 늘어납니다 . 전에 있던 `i` 를 지우고 새로운 변수가 들어오게 하고싶었습니다 알 수 없는 사용자 2019.2.18 15:10
    • 답변수정했습니다. 엽토군 2019.2.18 16:49

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)