未捕获的类型错误:无法读取未定义的“hasClass”属性
2014-09-04
14650
我需要在“onClick”侦听器中读取所选列表项的类。此元素与按钮相关,因为我有多个实例(测试中的测验项目)。我尝试在 http://jsfiddle.net/nimsson/5fW2Z/12/ 中执行此操作。 错误发生在
$("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 层次结构是
<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>
我做错了什么?我相信我的层次结构是正确的。
2个回答
您在下一个按钮单击事件中定位选定 li 的选择器不正确。您不需要将对象转换为 javascript 对象,因为您需要使用
.hasClass()
方法。您还可以缩小选择器的范围以使用
.closest()
,而不是多次使用
.parent()
。使用:
$(this).closest('.quizitem').find("ul.answers li.selected").hasClass("correct") ? "Correct":"Wrong")
Milind Anantwar
2014-09-04
$(this).parent().parent().children("ul.answers li.selected")[0]
返回一个 dom 元素,而不是没有
hasClass()
方法的 jQuery 对象。
所以
$(this).parent().parent().children("ul.answers li.selected").eq(0).hasClass('correct')
如果您有超过 1 个带有
li.selected
选择器的元素,那么您必须使用
eq()
,否则您可以说
.children("ul.answers li.selected").hasClass('correct')
Arun P Johny
2014-09-04