2014-11-17 4 views
0

지금 시도하고있는 것은 선택을 설정하고 점수를 기록하는 제출 단추를 사용하는 것입니다. DOM을 트래버스하는 방법에 어려움을 겪고 있습니다. 나는 형제의 아이를 선택하려고 노력하고 있다고 생각합니다. 그리고 왜 현재 코드가 그 목적을 위해 작동하지 않는지 잘 모르겠습니다.형제 요소의 자식을 선택하는 방법

<div class='section' id='s1'> 
    <div class='center' id='center1'> 
     <div class='question' id='q1'> 
     </div> 
     <div class='choices' id='choices1'> 
      <p class='a'>Choice A</p> 
      <p class='b'>Choice B</p> 
      <p class='c'>Choice C</p> 
      <p class='d'>Choice D</p> 
     </div> 

     <input type='submit' value='Submit' class='submit'> 
     <p class='score'></p> 
    </div> 
</div> 
var score = 0; 
$('.choices p').on('click', function() { 
    $(this).closest('.choices').find('p').removeClass('selected'); 
    $(this).addClass('selected'); 
}); 

$('.submit').click(function() { 
    var choice = $(this).prev('.choices').children().find('selected'); 
    if (choice.hasClass('a')) { 
     score += 1; 
    } 
    else if (choice.hasClass('b')) { 
     score += 2; 
    } 

    $(this).prev('.choices').find('p').off('click'); 
    $('.score').text('Score is ' + score); 
}); 
+0

는 UR 밖으로 누락 된 것 같다 '.' 'find ('. selected')'에 대한 선택자에서. –

+0

네, 방금 알아 챘지만, '. 선택'으로 변경했을 때 여전히 효과가 없었습니다. – aprobert

답변

0

$('.choices p').on('click', function() { 
     $('.choices p.selected').removeClass('selected'); 
     $(this).addClass('selected'); 
}); 

$('.submit').click(function() { 
     var choice = $('.choices p.selected'); 
     if (choice.hasClass('a')) { 
      score += 1; 
     } 
     else if (choice.hasClass('b')) { 
      score += 2; 
     } 

     $('.choices p').off('click'); 
     $('.score').text('Score is ' + score); 
}); 
+0

지금 시도해 보겠습니다. 내 유일한 관심사는 여러 질문에 대해 작동하는지 여부입니다. 이 질문과 같은 질문을 여러 개 가지고 있으므로 제출 버튼의 click 이벤트를 각 질문에 별도로 적용해야합니다. 그래서 매번 나는 사용자가 현재있는 질문에 대해 'selected'클래스가있는 p 만 선택해야합니다. – aprobert

+0

'$ ('선택 사항 p.selected', 'choices_1')' –

+0

을 통해 셀렉터에 컨텍스트를 추가 할 수 있습니다. 감사! 여기 내가 어떻게 작동 시키는가 : $ (this) .prev ('. choices) .find ('p.selected ') – aprobert

1

당신은 몇 가지 구문 오류가 있습니다. 어쩌면 이걸 해봐?

$('.choices p').on('click', function() { 
    $('.selected').removeClass('selected'); 
    $(this).addClass('selected'); 
}); 

$('.submit').click(function() { 
    var score = 0; 
    var choice = $('.selected'); 
    if (choice.hasClass('a')) { 
     score += 1; 
    } 
    else if (choice.hasClass('b')) { 
     score += 2; 
    } 

    $(this).prev('.choices').find('p').off('click'); 
    $('.score').text('Score is ' + score); 
}); 
+0

고마워! 위의 대답처럼 올바른 방향으로 나를 지적했습니다. 두 답을 모두 확인할 수 있다면. – aprobert

+0

도움이 되었기 때문에 기쁩니다. 감사 :) – tallrye

0

http://jsfiddle.net/tallrye/bqpg1a8L/ 안녕 난 당신이

.siblings()를 사용 할 수 있습니다 tallrye 답을 가고 싶어하지만 페이지에서 선택된 모든 클래스를 제거하지 않도록. removeClass ("selected")

그래서 div.choices 내에 선택된 클래스 만 제거합니다

여기에
<div class='choices' id='choices1'> 
     <p class='a'>Choice A</p> 
     <p class='b'>Choice B</p> 
     <p class='c'>Choice C</p> 
     <p class='d'>Choice D</p> 
</div> 

:

$('.choices p').on('click', function() {  
    $(this).addClass('selected').siblings().removeClass("selected"); 
}); 
관련 문제