检测复选框是否已选中并包含某个类?

时间:2019-04-25 08:54:13

标签: jquery

我有一个循环中的复选框,如果该复选框是正确答案,则它将添加类correct-answer

<input class="correct <?php if($row['correct'] == "Yes") { ?>correct-answer<?php } ?>" data-progress="<?php echo $counter; ?>" type="checkbox" name="answer[]" value="<?php echo $row['answer']; ?>" />

使用Jquery,如何检测复选框是否已选中以及复选框是否包含类correct-answer?我已经设法检测它是否被检查了,但是我想通过添加hasClass('.correct-answer')可以在运行if语句之前检测到这两个东西?

$('.correct-answer').change(function(){
    var item = $(this).data('progress');
if($(this).is(":checked").hasClass('.correct-answer')) {
        $('.quiz-progress-circle[data-progress="' + item + '"]').removeClass("progress-incorrect");
        $('.quiz-progress-circle[data-progress="' + item + '"]').addClass("progress-correct");
} else {
        $('.quiz-progress-circle[data-progress="' + item + '"]').removeClass("progress-correct");
  $('.quiz-progress-circle[data-progress="' + item + '"]').addClass("progress-incorrect");
}
});

我要去哪里错了?

3 个答案:

答案 0 :(得分:2)

下面的行将不执行您想要的操作:

if ($(this).is(":checked").hasClass('.correct-answer')) {...}

这里的问题是is(':checked')返回一个布尔值,然后您试图对其执行hasClass('.correct-answer'),这显然不起作用。

正确的方法是在if语句中具有两个不同的条件:

if ($(this).is(":checked") && $(this).hasClass('correct-answer')) {...}

答案 1 :(得分:0)

从hasclass中删除该点并添加一个“和”:

if($(this).is(":checked") && $(this).hasClass('correct-answer')) {...

答案 2 :(得分:0)

只需使用本机DOM API添加替代项:

if (this.checked && this.classList.contains('correct-answer'))

或更短

if (this.checked && this.matches('.correct-answer'))