2014-09-04 212 views
1

我需要读取'onClick'侦听器中选定列表项的类。这个元素是相对于按钮,因为我有多个实例(测试中的测验项目)。我试图在http://jsfiddle.net/nimsson/5fW2Z/12/中这样做。 在未捕获TypeError:无法读取未定义的'hasClass'属性

$("ul.quiz div.quizitem div.nav span.next").click(function(e) { 
    alert($(this).parent().parent().children("ul.answers li.selected")[0].hasClass("correct") ? "Correct":"Wrong"); 
}); 

发生错误的HTML hiearchy是

<ul class="quiz"> 
     <li> 
      <div class="quizitem"> 
       <div class="question">What is 2+2?</div> 
       <br /> 
       <ul class="answers"> 
        <li class="wrong answer">a. 5</li> 
        <li class="wrong answer">b. 2</li> 
        <li class="correct answer">c. 4</li> 
       </ul> 
       <br /> 
       <br /> 
       <div class="nav"><span class="prev">Previous</span><span class="next">Next</span></div> 
      </div> 
     </li> 
     <li> 
      <div class="quizitem"> 
       <div class="question">What is 2+2?</div> 
       <br /> 
       <ul class="answers"> 
        <li class="wrong answer">a. 5</li> 
        <li class="wrong answer">b. 2   </li> 
        <li class="correct answer">c. 4</li> 
       </ul> 
       <br /> 
       <br /> 
       <div class="nav"><span class="prev">Previous</span><span class="next">Next</span></div> 
      </div> 
     </li> 
    </ul> 

我做了什么错?我确实相信我有正确的结构。

回答

3

您有错误的选择器用于在下一个按钮单击事件中定位选定li。您不需要将对象转换为javascript对象,因为您需要使用.hasClass()方法。你也可以缩小你的选择来使用通过.parent()多个times.Use的.closest() insteads:

$(this).closest('.quizitem').find("ul.answers li.selected").hasClass("correct") ? "Correct":"Wrong") 

Working Demo

3

$(this).parent().parent().children("ul.answers li.selected")[0]返回DOM元素不是一个jQuery对象不具有hasClass()方法..

所以

$(this).parent().parent().children("ul.answers li.selected").eq(0).hasClass('correct') 

如果你有超过1元与li.selected选择只有那么你必须使用eq()否则您只能说.children("ul.answers li.selected").hasClass('correct')

相关问题