inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

타이머 끝나기 전 '인증번호 전송' 누르면 타이머가 겹치는 문제

해결됨

[코드캠프] 시작은 프리캠프

안녕하세요 최종 과제에서 타이머를 다시 만드는데, 타이머 3분이 끝나기 전에 '인증번호 전송'을 다시 누르면 타이머가 겹쳐서 시간이 이상하게 표기됩니다. 수업때는 조건이 time < 0일때, clearInterval(timer) 로 해결한다고 하셨는데, 타이머 끝나기 전에는 타이머가 초기화되지않아서요... 아래는 제 코드와 설명입니다. (final.js 파일 안) let isStarted = false // 인증번호 생성 및 타이머 함수. 인증번호 버튼 onclick="startTimer()"로 되어있음. let startTimer = () => { if (isStarted === false){ isStarted = true // 인증번호 생성 let token = String(Math.floor(Math.random() * 0xffff)).padEnd(6, "0") document.getElementById("auth__number").innerText = token // 인증확인 버튼 활성화 & //인증 전송 비활성화 document.getElementById("auth__checkbtn__id").disabled = false //document.getElementById("auth__sendbtn__id").disabled = true // 타이머 시작 (5초) let time = 5 let timer clearInterval(timer) timer = setInterval(() => { if (time >= 0 && isStarted){ //여기 isStarted 조건 추가해 중복타이머 막음 let min = Math.floor(time / 60) let sec = String(time % 60).padStart(2,"0") document.getElementById("auth__time").innerText = min + ":" + sec time = time - 1 } else { document.getElementById("auth__checkbtn__id").disabled = true document.getElementById("auth__sendbtn__id").disabled = false //isStarted = false // 그렇다고 여기에 isStarted = false 더쓰면 또 겹침... 깨끗한 상태로 시작이 왜안되지? clearInterval(timer) document.getElementById("auth__time").innerText = '3:00' document.getElementById("auth__number").innerText = '000000' } }, 1000) } else { // **타이머 작동중일때. isStarted 상태 바꾸기.. ** // 그러나 다시 If문을 진입해 타이머 재시작하려면 다시 [인증 전송]버튼 눌러야함 isStarted = false console.log('타이머 작동중임') // clearInterval(timer)는 위의 If문 안에있어 불러올 수 없음. // startTimer()를 재귀적으로 불러오면 또 다시 타이머 겹침 } } <로직> 1. 타이머가 작동중이지 않을때 버튼 누름 (isStarted = false 상태) 2. 타이머 시작 (isStarted = true 상태) 3. ** 타이머가 작동중일때 [인증 전송 버튼] 다시 누름 (isStarted = false로 바꿈) ** --> 타이머가 재시작 하지 않음 (함수는 else문에서 끝났기 때문) 4. 재시작위해 [인증 전송버튼] 다시 누름 (3단계에서 isStarted가 false로 바뀌어서 이제 타이머 다시시작) **표시 있는 else문 **(3단계)에서 IsStarted = false로 바뀌고 else문이 끝났기 때문에, 다시 타이머를 시작하도록 재귀적으로 startTimer()함수를 실행하면 또 타이머가 겹칩니다. ㅠㅠ 이렇게 저렇게 바꿔봐도 해결이 안되서 그냥 인증과 동시에 인증번호생성 버튼을 비활성화 시켰습니다... 어떻게 타이머 작동중에 [인증 전송]버튼 누르면 겹침문제없이 다시 타이머가 초기화되도록 할 수 있나요?

  • final
  • HTML/CSS
  • timer
  • javascript
  • 타이머
  • 최종과제
  • 인증번호
JI AE OH 댓글 1 좋아요 0 조회수 928

store 선언할 때 Field 'store' may be 'final' 에러

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. store을 선언할 때 Field 'store' may be 'final' 라는 에러메시지가 뜹니다. final로 선언하면 상수값이 되는건데 왜 final로 선언해야 한다고 하는지 모르겠습니다. 강사님이 하실 때는 이런 메시지가 뜨지 않았던 것 같은데 왜 이러는 걸까요?

  • store
  • final
  • MVC
  • spring
  • java
  • spring-boot
sunset8670 댓글 1 좋아요 0 조회수 1215

인기 태그

인프런 TOP Writers

주간 인기글