2014-09-04 170 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')

相關問題