jQuery评估复选框是不是被选中并包含类true [重复]

Posted

技术标签:

【中文标题】jQuery评估复选框是不是被选中并包含类true [重复]【英文标题】:jQuery evaluate if checkbox is checked and contains the class true [duplicate]jQuery评估复选框是否被选中并包含类true [重复] 【发布时间】:2014-07-20 14:36:52 【问题描述】:

我正在使用 jQuery 创建多项选择评估。目前DOM结构如下:

<button class="multiplesubmit">Check Answer</button>
<ul class="multiplechoice_answergroup">
<li class="multiplechoice_answer True"><input class="checkbox" type="checkbox" name="checkbox"> Answer 1</li>
<li class="multiplechoice_answer False"><input class="checkbox" type="checkbox" name="checkbox"> Answer 1</li>
<li class="multiplechoice_answer False"><input class="checkbox" type="checkbox" name="checkbox"> Answer 1</li>
<li class="multiplechoice_answer True"><input class="checkbox" type="checkbox" name="checkbox"> Answer 1</li>
</ul>

我需要写一个函数,当按钮被点击时查看复选框是否被勾选,并且li的类名包含'True'。

到目前为止,这是我的 jQuery:

      $('.multiplechoice_answer .Paragraph').prepend('<input class="checkbox" type="checkbox" name="checkme" />');
      $('.multiplechoice_wrap').prepend('<button class="submit_button multiplesubmit">Check Answer</button>');


      $('.multiplesubmit').click(function() 
        multipleChoiceCheck();

      );

      var multipleChoiceCheck = function() 
        if($('input:checkbox[name=checkme]').is(':checked') && $('.multiplechoice_answer').hasClass('True')) 
          alert('correct!');
        

;

【问题讨论】:

[name=checkme] 这永远不会匹配您当前 html 代码中的复选框,看起来您错过了复选框的名称。 @BoatCode 这没有帮助。我知道如何查看复选框是否被勾选。我的问题是,只有在复选框被选中的父元素包含“True”类的情况下才能给出正确的反馈 @KingKing 如果您查看 jquery,则会输出名称。如果单击任何复选框,则会弹出警报。 【参考方案1】:
$('.multiplesubmit').click(function () 
  var correctAnswers = $(this).next('ul').children('li').filter(function () 
    return $(this).hasClass('True') && $(this).find('input[type="checkbox"]:checked').length>0;
  );
  if(correctAnswers.length>0) 
    alert('found')
  
);

JSFiddle

更新

根据 cmets

$('.multiplesubmit').click(function () 
  var correctAnswers = $(this).next('ul').children('li').filter(function () 
    return $(this).hasClass('True') && $(this).find('input[type="checkbox"]:checked').length>0;
  );
  var wrongAnswers = $(this).next('ul').children('li').filter(function () 
    return $(this).hasClass('False') && $(this).find('input[type="checkbox"]:checked').length>0;
  );
  if (correctAnswers.length>0 && wrongAnswers.length<1) 
    alert('found')
  
);

JSFiddle

【讨论】:

不起作用。当我调试正确答案时未定义,原因是下一个('ul li')部分。 @Dondada 尝试更新... 我输入 $(this).next('ul'); 后得到一个空白数组;在控制台中 @Dondada 这是一个错字.. 类名应该是 'True' 而不是 'true' 我通常从不使用以大写字母开头的类名... :) 这是一个问题。但是 $(this).next('ul') 仍然返回一个空数组。【参考方案2】:

试试这个:

我将所有不正确的文本颜色更改为红色,正确将文本颜色更改为绿色,但我留下了 cmets,因此您可以为不正确和正确的答案做任何您喜欢的事情

$('.multiplesubmit').click(function() 
    $.each('input:checkbox[name=checkme]', function()
    if( $(this).is(':checked')
        if( $(this).hasClass('True')       
           // CHECKED - CORRECT
           $(this).parent().css( 'color' : 'green' );
         
         else
           // CHECKED - INCORRECT
           $(this).parent().css( 'color' : 'red' );
         
    
    else
      if( $(this).hasClass('True')       
        // UN-CHECKED - INCORRECT
        $(this).parent().css( 'color' : 'red' );
      
        else
       // UNCHECKED - CORRECT
        $(this).parent().css( 'color' : 'green' );
      

    );
);

【讨论】:

我应该把它放在一个函数中并在按钮点击时调用它吗? 是的,输入按钮点击。,我会更新 @Dondada - 请参阅添加 .parent() 的编辑,我刚刚意识到我的其他代码实际上可能没有正确更改颜色 我收到语法错误。我会尝试修复【参考方案3】:

这将单独检查每个复选框,因为您可以检查多个复选框并具有 True 类。

$(document).ready(function() 
  $('.multiplesubmit').click(function() 
    multipleChoiceCheck();
  );
);

function multipleChoiceCheck() 
  $(".multiplechoice_answergroup").find("input[type=checkbox]").each(function() 
    var $this = $(this);
    if($this.prop("checked") && $this.parent().hasClass("True")) 
      alert($this.val());
    
  );

我在您的复选框中添加了值以区分答案:

<button class="multiplesubmit">Check Answer</button>
<ul class="multiplechoice_answergroup">
    <li class="multiplechoice_answer True"><input class="checkbox" type="checkbox" name="checkbox" value="Answer 1"> Answer 1</li>
    <li class="multiplechoice_answer False"><input class="checkbox" type="checkbox" name="checkbox" value="Answer 2"> Answer 2</li>
    <li class="multiplechoice_answer False"><input class="checkbox" type="checkbox" name="checkbox" value="Answer 3"> Answer 3</li>
    <li class="multiplechoice_answer True"><input class="checkbox" type="checkbox" name="checkbox" value="Answer 4"> Answer 4</li>
</ul>

JS Fiddle Example

【讨论】:

我的错误。我刚刚发现了问题并编辑了我的答案。我也提供了一个带有工作示例的 JS Fiddle 示例。

以上是关于jQuery评估复选框是不是被选中并包含类true [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎么判断某一个复选框是不是被选中啊?

使用jquery检查复选框是不是被选中

怎样判断checkbox是不是选中

怎样判断一组checkbox中是不是有被选中的?

jquery脚本检查文本框是不是为空,或者复选框是不是被选中

jQuery怎样判断按钮是不是被选中