2016-06-08 9 views
0
<script> 
    $(document).ready(function(){ 
    var names = ['Hannah', 'Lucy', 'Brenda', 'Lauren', 'Mary']; 
    var liked = []; 
    var disliked = []; 

     while(names.length > 0){ 

      document.getElementById('demo').innerHTML = names[i]; 
      function likeOrDislike(choice){ 
      if(choice == 'Like') 
      { 
      liked.push(names[0]) 
      names.splice(0, 1) 
      } 
      else if (choice == 'Dislike') 
      { 
      disliked.push(names[i]) 
      names.splice(0, 1) 
      } 

     }; 
    }; 
}); 
    </script> 

배열 이름이 비어있을 때까지 while 루프를 계속 진행하라고합니다. 그런 다음 사용자가 매번 텍스트의 첫 번째 이름을 배열로 대체하게됩니다. 그런 다음 like/dislike를 선택한 다음 배열의 첫 번째 이름을 제거하고 names 배열이 비어있을 때까지 프로세스를 반복합니다. 내가 브라우저에로드 할 때 나는이 의견에 지적으로 정의되지 않은 i 외에 루프이 코드가 무한 루프를 수행하는 이유는 무엇입니까?

+1

콘솔에 오류가 있는지 확인해야합니다. 그것은'내가 정의되지 않았다 '는 것을 당신에게 즉시 알려줄 것입니다. 그 위에 루프 내에서 함수를 정의하는 것은 정말 나쁜 생각입니다. – jmcgriz

답변

3

에 갇혀 생각으로

그러나,이 페이지를로드하지 않습니다, 당신은 결코 names

을 변경하지있어

function likeOrDislike() 내에서 names에 대한 모든 처리가 수행되며 절대로 호출하지 않습니다. 그래서 이런 일이

:

  • 이름 (names >0)이 있지만

    다음이 스텁
  • 의 내용을 ... 그리고 그게입니다. 당신은 결코 이름을 바꿀 수 없습니다.
  • ... 함수가 호출되지 않습니다.

아마 당신은 이런 식으로 뭔가를하는 것이지 - 이것은 단지 당신이 습득하려고하는 것을 전적으로 가정 한 예일뿐입니다.

$(document).ready(function(){ 
    var names = ['Hannah', 'Lucy', 'Brenda', 'Lauren', 'Mary']; 
    var liked = []; 
    var disliked = []; 

    $('#yourLikeButton').click(function(){ 
    var name = $(this).data('name'); // on your button put data-name="Hannah" 
    var idx = names.indexOf(name); 
    liked.push(names[idx]); // this is if you're playing around with indexes 
    names.splice(idx, 1); // this is if you're playing around with indexes 
    }); 

    // similar for your dislike button  

}); 
관련 문제