Javascript에 이벤트 리스너를 추가하면 내 (간단한) 수학이 두 배로 늘어납니다.

bill_face

나는 가능한 한 간결하게하려고 노력할 것이지만, 내 깊이를 벗어났습니다 (나는 아기 수영장에 있어야합니다 :)

나는 부사가 있어야 할 곳에 공백이있는 임의의 문장을 제시하는 내 아들을위한 간단한 웹 사이트를 만들려고합니다. 그런 다음 사용자는 아래에 제시된 3 개의 무작위 단어 중 부사 인 것을 추측해야합니다. 그런 다음 내 문제가있는 채점 시스템을 구현하려고했습니다.

버튼이 정적 일 때 정상적으로 작동했지만 응답 버튼에 이벤트 리스너를 무작위로 추가하고 추가하기 때문에 점수에 1 개가 아닌 2 개가 추가됩니다. 문제 코드는 하단에 있습니다 (// 버튼에 이벤트 리스너 추가).

또 다른 문제는 누군가가 첫 번째 질문에 잘못 대답하면 내 코드에 '정의되지 않은 정답'이 있다는 것입니다. '정답 0 개'라고 말할 수 없습니다.

  <head>
    <title>Adverb Kings</title>
  </head>
  <body>
    <h1>Adverb Kings</h1>

    <div id="sentence"></div>

    <div>
      <button type="button" onclick="right()"></button>
      <button type="button" onclick="wrong()"></button>
      <button type="button" onclick="wrong()"></button>
        
        <div id="result"></div>
      <div id="correct"></div>
      <div id="attempted"></div>
      

    </div>
    
    <script>
//define right functions
function right() {
    correctAlert();
    correctAnswer();
    answersAttempted();
    }
//define wrong functions
function wrong() {
    incorrectAlert();
    answersAttempted();
    }
//alert correct 
function correctAlert() {
    var element = document.getElementById("result");
    element.classList.add("correct");
    element.innerHTML = "Correct";
    }
        
//alert incorrect
function incorrectAlert() {
    var element = document.getElementById("result");
    element.classList.add("incorrect");
    element.innerHTML = "Incorrect, try again.";
    }
    
//tracking correct answers
function correctAnswer() {
    
        if (sessionStorage.correct) {sessionStorage.correct = Number(sessionStorage.correct)+1;
} else {
      sessionStorage.correct = 1;
    }
     
}
   
//tracking attempted questions count
function answersAttempted() {
  if (typeof(Storage) !== "undefined") {
    if (sessionStorage.attempts) {
      sessionStorage.attempts = Number(sessionStorage.attempts)+1;
    } else {
      sessionStorage.attempts = 1;
    }
    document.getElementById("attempted").innerHTML = "You have attempted " + sessionStorage.attempts + " question(s) in this session and got " + sessionStorage.correct + " correct" ;
  } else {
    document.getElementById("attempted").innerHTML = "Sorry, your browser does not support web storage...";
  }
}
         
//create sentence array
var sentence;
      sentence = ['The people _______ went crazy about the new game options', 'The man _______ slipped his hands around his desk handle', 'He _______ typed a new password for his school account'];

      //randomise sentence array
      var el = document.getElementById('sentence');
      el.textContent = sentence[Math.floor(Math.random() * sentence.length)];

      //set order of words in order to randomise
      var orders = [0, 1, 2];
      shuffle(orders);
      
      //add event listeners to buttons
      var buttons = document.getElementsByTagName("button");
      buttons[orders[0]].addEventListener('click', right);
      buttons[orders[1]].addEventListener('click', wrong);
      buttons[orders[2]].addEventListener('click', wrong);
      
      //create and randomise adverb array
      var adverbs = ['slowly', 'quickly', 'insanely'];
      buttons[orders[0]].textContent = adverbs[Math.floor(Math.random() * adverbs.length)];

      //create and randomise other words
      var other1 = ['burger', 'insane', 'ugly'];
      buttons[orders[1]].textContent = other1[Math.floor(Math.random() * other1.length)];
      var other2 = ['sausage', 'fist', 'gun'];
      buttons[orders[2]].textContent = other2[Math.floor(Math.random() * other2.length)];
      
      //shuffle position of adverb
      function shuffle(array) {
        array.sort(() => Math.random() - 0.5);
      }

    
    </script>
  </body>
</html>``` 
크리스

HTML과 JS 모두에서 이벤트 리스너를 추가하고 있습니다.

HTML에서 버튼의 onclick = "..."부분을 제거하면 모두 괜찮습니다.

숫자가 정의되지 않도록하려면 함수를 호출하기 전에 sessionStorage.correct를 0으로 설정합니다.

<script>
    sessionStorage.correct = 0;
    ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Ubuntu 16.04 및 Nvidia-외부 모니터를 추가하면 두 모니터에서 단일 디스플레이가 늘어납니다.

분류에서Dev

루프 내부에 이벤트 리스너를 추가하면 이전 데이터가 무시됩니다.

분류에서Dev

시간이 지정된 자바 스크립트에 의해 새로 고쳐지면 Div가 늘어납니다.

분류에서Dev

두 개의 날짜를 빼면 시간이 더 늘어납니다.

분류에서Dev

tmpfs에서 파일을 mmap하면 메모리 사용량이 두 배로 늘어 납니까?

분류에서Dev

창 높이와 동일한 jquery div가 내용으로 늘어납니다.

분류에서Dev

이벤트 리스너 내가이 단어를 사용할 수없는 이유

분류에서Dev

한 div에 이벤트 리스너를 추가하고 다른 div를 클릭하면 제거

분류에서Dev

두 번째 라우터에 파일을 업로드하면 웹 페이지로드 시간이 약 35 초로 크게 늘어납니다.

분류에서Dev

한 번에 모두 선택하면 확인란에 이벤트 리스너 추가

분류에서Dev

내 도우미에서 간단한 수학이 작동하지 않습니다.

분류에서Dev

WPF : 버튼의 StackPanel에 배치하면 이미지가 늘어납니다.

분류에서Dev

WPF : 버튼의 StackPanel에 배치하면 이미지가 늘어납니다.

분류에서Dev

UIButton에 배경 이미지를 설정하면 contentMode가 ScaleAspectFit로 설정되어 있어도 버튼이 늘어납니다.

분류에서Dev

Framerjs의 동일한 요소에 두 개의 이벤트를 추가하려면 어떻게해야합니까?

분류에서Dev

상태를 확인한 다음 리스너를 추가하면 이벤트를 놓칠 수 있습니까?

분류에서Dev

코로나 SDK의 한 개체에 두 개의 터치 이벤트 리스너가 가능합니까?

분류에서Dev

매우 간단한 이벤트 리스너에서 변수를 함수에 전달할 수 없습니다.

분류에서Dev

JavaScript의 프로토 타입에 이벤트 리스너를 추가하는 방법은 무엇입니까?

분류에서Dev

이벤트 리스너에 "this"를 추가 하시겠습니까?

분류에서Dev

프로토 타입 내에서 동적으로 생성 된 요소에 이벤트 리스너를 추가하는 방법은 무엇입니까?

분류에서Dev

UseEffect 내의 UseRefs에 이벤트 리스너를 추가하는 방법

분류에서Dev

MPI : 프로세서 수가 증가하면 출력 시간이 늘어납니다.

분류에서Dev

부분 페이지의 일부로로드 될 때 양식에 이벤트 리스너를 추가하려면 어떻게해야합니까?

분류에서Dev

양식에 제출 이벤트 리스너를 추가하면 어떤 event.target이 포함됩니까?

분류에서Dev

Google 스프레드 시트 쿼리 내에서 합계를 사용하면 많은 셀에서 "sum"이라는 단어가 나타납니다.

분류에서Dev

클릭 이벤트를 두 번 생성하는 함수를 실행하면 한 번의 클릭으로 두 번 클릭 이벤트가 발생합니다.

분류에서Dev

react 및 typescript를 사용하여 ref로 액세스 한 div 요소에 이벤트 리스너를 추가하는 방법은 무엇입니까?

분류에서Dev

jQuery-동적으로 추가 된 드롭 가능한 테이블 행에 대한 이벤트 리스너를 구현하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Ubuntu 16.04 및 Nvidia-외부 모니터를 추가하면 두 모니터에서 단일 디스플레이가 늘어납니다.

  2. 2

    루프 내부에 이벤트 리스너를 추가하면 이전 데이터가 무시됩니다.

  3. 3

    시간이 지정된 자바 스크립트에 의해 새로 고쳐지면 Div가 늘어납니다.

  4. 4

    두 개의 날짜를 빼면 시간이 더 늘어납니다.

  5. 5

    tmpfs에서 파일을 mmap하면 메모리 사용량이 두 배로 늘어 납니까?

  6. 6

    창 높이와 동일한 jquery div가 내용으로 늘어납니다.

  7. 7

    이벤트 리스너 내가이 단어를 사용할 수없는 이유

  8. 8

    한 div에 이벤트 리스너를 추가하고 다른 div를 클릭하면 제거

  9. 9

    두 번째 라우터에 파일을 업로드하면 웹 페이지로드 시간이 약 35 초로 크게 늘어납니다.

  10. 10

    한 번에 모두 선택하면 확인란에 이벤트 리스너 추가

  11. 11

    내 도우미에서 간단한 수학이 작동하지 않습니다.

  12. 12

    WPF : 버튼의 StackPanel에 배치하면 이미지가 늘어납니다.

  13. 13

    WPF : 버튼의 StackPanel에 배치하면 이미지가 늘어납니다.

  14. 14

    UIButton에 배경 이미지를 설정하면 contentMode가 ScaleAspectFit로 설정되어 있어도 버튼이 늘어납니다.

  15. 15

    Framerjs의 동일한 요소에 두 개의 이벤트를 추가하려면 어떻게해야합니까?

  16. 16

    상태를 확인한 다음 리스너를 추가하면 이벤트를 놓칠 수 있습니까?

  17. 17

    코로나 SDK의 한 개체에 두 개의 터치 이벤트 리스너가 가능합니까?

  18. 18

    매우 간단한 이벤트 리스너에서 변수를 함수에 전달할 수 없습니다.

  19. 19

    JavaScript의 프로토 타입에 이벤트 리스너를 추가하는 방법은 무엇입니까?

  20. 20

    이벤트 리스너에 "this"를 추가 하시겠습니까?

  21. 21

    프로토 타입 내에서 동적으로 생성 된 요소에 이벤트 리스너를 추가하는 방법은 무엇입니까?

  22. 22

    UseEffect 내의 UseRefs에 이벤트 리스너를 추가하는 방법

  23. 23

    MPI : 프로세서 수가 증가하면 출력 시간이 늘어납니다.

  24. 24

    부분 페이지의 일부로로드 될 때 양식에 이벤트 리스너를 추가하려면 어떻게해야합니까?

  25. 25

    양식에 제출 이벤트 리스너를 추가하면 어떤 event.target이 포함됩니까?

  26. 26

    Google 스프레드 시트 쿼리 내에서 합계를 사용하면 많은 셀에서 "sum"이라는 단어가 나타납니다.

  27. 27

    클릭 이벤트를 두 번 생성하는 함수를 실행하면 한 번의 클릭으로 두 번 클릭 이벤트가 발생합니다.

  28. 28

    react 및 typescript를 사용하여 ref로 액세스 한 div 요소에 이벤트 리스너를 추가하는 방법은 무엇입니까?

  29. 29

    jQuery-동적으로 추가 된 드롭 가능한 테이블 행에 대한 이벤트 리스너를 구현하는 방법은 무엇입니까?

뜨겁다태그

보관