开发者问题收集

未捕获的类型错误:无法读取未定义的“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