inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[하루 10분|Web Project] HTML/JS/CSS로 나만의 심리테스트 사이트 만들기

뒤로가기 기능

338

토마토

작성한 질문수 4

1

안녕하세요

뒤로가기기능은 어떻게 추가해야할까요?

예전 질문에도 있던데...혹시 방법없을까요 ㅎㅎ

bootstrap javascript HTML/CSS

답변 1

0

판다코딩

현재 코드는 goNext 함수에서 index를 1씩 증가시키고,

그것에 해당하는 질문을 출력하는 방식으로 구성되어 있습니다.

 

단순히 뒤로가기 기능을 부여하고자 한다면,

index를 1을 빼주는 동작으로 구현이 될 것 같습니다.

 

다만, 첫번째 응답에서는 뒤로가기가 동작하지 않도록 해야하며

뒤로간 이후 새로운 응답을 클릭하였을 때 다시 select 배열에 값이 저장될 수 있도록

해야할 것 같습니다.

object 배열로 만들 필요성이 있겠네요.

0

토마토

감사합니다

혹시 쉽게 설명가능하실까요 제이쿼리만 다룰줄알지 자바스크립트는 초보라서요..ㅜㅜ

 

0

판다코딩

프로세스를 정리해드리면

1. goPrev함수를 생성해야 하고
- goPrev함수는 idx를 1 감소하는 동작을 수행해야 합니다.

2. 첫번째 질문에서는 goPrev 함수의 동작을 막아야 합니다.

현재는 select라는 object를 생성하여 사용자 응답 결과를 받고 있습니다.

다만, prev를 통해 이전 질문으로 돌아간 다음, 다른 결과를 선택하게 된다면

select배열에 이전에 선택한 값을 1 감소해주어야 하고,

현재에 선택한 값을 1 증가시켜주어야 합니다.

위 과정이 다소 복잡하고 어려울 것 같아서

object 배열로 접근드릴 것을 권장드린 겁니다!

추가. 굳이 obj 배열이 아니더라도, obj에 인덱스를 담고있는 데이터를 추가하는 방법도 가능할 것 같습니다~

0

토마토

안녕하세요

goPrev함수에 이렇게 감소를 하고

addAnswer가 아닌 addAnswers를 하나 더 만들었는데

현재문제는 그대로 있고, 이전 질문과 문제가 다시 나옵니다. 그리고 다시 문제를 실행하려하면 반응이없습니다.

이렇게 되는게 아닌걸까요 ㅠㅠ

 

function goPrev(qIdx){

 

    var children = document.querySelector('.answerList');

 

    if(qIdx === endPoint){

    goResult();

    return;

    }

    

  

  var q = document.querySelector('.qBox');

  q.innerHTML = qnaList[qIdx].q;

  for(let i in qnaList[qIdx].a){

    addAnswers(qnaList[qIdx].a[i].answer, qIdx, i);

  }

  var status = document.querySelector('.statusBar');

  status.style.width = (100/endPoint) * (qIdx-1) + '%';

}

    

function addAnswers(answerText, qIdx, idx){

  var a = document.querySelector('.answerBox');

  var prev = document.querySelector('.prevBtn');

  

 

  var answer = document.createElement('button');

  answer.classList.add('answerList');

  answer.classList.add('my-3');

  answer.classList.add('py-3');

  answer.classList.add('mx-auto');

  answer.classList.add('fadeIn');

 

  a.appendChild(answer);

  answer.innerHTML = answerText;

   

  prev.addEventListener("click", function(){

    var children = document.querySelectorAll('.answerList');

    for(let i = 0; i < children.length; i++){

      children[i].disabled = true;

      children[i].style.WebkitAnimation = "fadeOut 0.5s";

      children[i].style.animation = "fadeOut 0.5s";

    }

    setTimeout(() => {

      var target = qnaList[qIdx].a[idx].type;

      for(let i = 0; i < target.length; i--){

        select[target[i]] -= 1;

      }

 

      for(let i = 0; i < children.length; i++){

        children[i].style.display = 'none';

      }

 

 

 

function addAnswers(answerText, qIdx, idx){

  var a = document.querySelector('.answerBox');

  var prev = document.querySelector('.prevBtn');

  

 

  var answer = document.createElement('button');

  answer.classList.add('answerList');

  answer.classList.add('my-3');

  answer.classList.add('py-3');

  answer.classList.add('mx-auto');

  answer.classList.add('fadeIn');

 

  a.appendChild(answer);

  answer.innerHTML = answerText;

   

  prev.addEventListener("click", function(){

    var children = document.querySelectorAll('.answerList');

    for(let i = 0; i < children.length; i++){

      children[i].disabled = true;

      children[i].style.WebkitAnimation = "fadeOut 0.5s";

      children[i].style.animation = "fadeOut 0.5s";

    }

    setTimeout(() => {

      var target = qnaList[qIdx].a[idx].type;

      for(let i = 0; i < target.length; i--){

        select[target[i]] -= 1;

      }

 

      for(let i = 0; i < children.length; i++){

        children[i].style.display = 'none';

      }

      goPrev(++qIdx);

    },450)   

  }, false);

    

    

    

}

      goPrev(++qIdx);

    },450)   

  }, false);

    

    

    

}

 

 

 

0

판다코딩

goPrev 함수를 통해서 현재 문제에 대한 스타일을 꺼주셔야 할 것 같습니다.

또 goPrev 함수가 실행이 되면서 생성되는 버튼들에 대해서 다시 event를 걸어줄 필요가 있는 것 같습니다.

사실 말씀해주신 기능이 static한 html js만 가지고 구현하기 조금 난해해 보이긴 합니다.

혹은 select배열을 obj로 바꾸어서 사용자에게 qIdx선택권을 주는 방향으로 구조적으로 코드가 바뀔 필요도 있는 것 같습니다.

제가 조금 여유가 되는 상황이면 저도 직접 코딩을 진행해보면서 최적의 구조를 찾아보고..

영상으로도 찍어서 설명도 드리고 싶은데,

제가 너무 바빠서 빠른 시간 안에 시간을 내기 어려울 것 같네요... 죄송합니다.

emmet 에디터 설치 하려고 하는데 안 나오네요

0

168

2

결과 이미지랑 글이 안떠요 왜일까요

0

144

1

select 배열 이해를 도와주세요!

0

378

1

result 에서 결과가 안 나와요.

0

380

1

결과 계산하기에서 콘솔이 다르게 찍힙니다.

0

405

1

다음 버튼을 누르면 다음질문으로 넘어가게 만들고 싶어요.

0

391

1

클론코딩 시

0

373

1

결과페이지 선택값 합산하기

0

359

1

select 부분이 이해가 안가서 질문드립니다 ㅠ

0

394

1

index에서 result 페이지로 이동 질문드립니다.

0

441

1

진행바 강의에서요 스테이터스바가 짤립니다

0

385

1

이미지버전에서 부트스트랩 이미지하고 텍스트도 이용하고 싶어요

0

527

1

viewport 가 제대로 작동을 안해요 뭐가 문제일까요?

0

484

1

결과 페이지별 개별링크버튼 추가

0

363

1

뒤로가기

0

429

1

netlify not found 오류

1

1066

1

아톰 에디터 설치

2

951

1

display:block을 사용하는 이유

1

463

1

qIdx수에 따라 for 문이 돌아요 ㅜ.ㅜ

1

387

1

카카오톡 공유하기

1

591

1

질문 개수 5개에 결과 4개

0

438

1

질문 수를 줄이는 방법

1

395

1

강의 순서

1

273

1

결과페이지에서 result-0,1,23,....html 호출하기

1

359

1