首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计数复选框,有可能排除jQuery中的特定复选框

计数复选框,有可能排除jQuery中的特定复选框
EN

Stack Overflow用户
提问于 2022-07-22 14:56:38
回答 2查看 74关注 0票数 1

我想让用户通过一个检查表,直接查看标记了多少复选框,并直接计算百分比。为此,我找到了一个解决办法,但后来意识到并非所有的问题都是相关的。为此,我想提供禁用特定复选框的可能性,这些复选框应该是自动计算和显示的。

我尝试了几种方法,但是没有找到正确的方法来组合这些功能。

在这里,您可以看到它在行动https://jsfiddle.net/jonasfuchs/novqm71z/81/

代码语言:javascript
复制
$(document).ready(function() {

  var $checkboxes = $('#checklist td[class="list-checkbox"] input:checkbox').not(':disabled')

  $checkboxes.change(function() {
    var countCheckedCheckboxes = $checkboxes.filter(':checked').length,
      percentageCheckedCheckboxes = Math.round(countCheckedCheckboxes / $checkboxes.length * 100);

    $('#count-checked-checkboxes').text(countCheckedCheckboxes);
    $("#percentage-checked-checkboxes").text(percentageCheckedCheckboxes);
  });

  $("input").change(function() {
    var target = $(this).data('target');
    if (target) $("input[data-disenable='" + target + "']").prop("disabled", $(this).is(':checked'));
  });
  
    $("#count-total-checkboxes").text($checkboxes.length);


});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="content">
      <form action="" method="post" id="checklist" accept-charset="UTF-8">
        <div>
          <table>
            <tr>
              <td class="list-checkbox">
                <div class="form-item form-type-checkbox">
                  <input type="checkbox" id="rule-1" name="plain-language" data-disenable='rule-1' value="rule-1" class="form-selection-control"/>
                  <label class="rule-description">Rule 1</label>
                </div>
              </td>
              <td><input type="checkbox" name="relevant" data-target='rule-1' value="disable">
                <label for="disable" class="label">not relevant</label>
              </td>
            </tr>
            <tr>
              <td class="list-checkbox">
                <div>
                  <input type="checkbox" id="rule-2" name="descriptive-link" data-disenable='rule-2' value="rule-2" class="form-selection-control" />
                  <label class="rule-description">Rule 2</label>
                </div>
              </td>
              <td>
                <input type="checkbox" name="relevant" data-target='rule-2' value="disable">
                <label for="disable" class="label">not relevant</label>
              </td>
            </tr>
          </table>
        </div>

        <div class="count-checkboxes-wrapper">
          <span id="count-checked-checkboxes">0</span> of
          <span id="count-total-checkboxes">0</span> checked |
          <span id="percentage-checked-checkboxes">0</span> % conformance |
          <span id="count-disabled-checkboxes">0</span> disabled
        </div>

      </form>
    </div>

  </body>

</html>

有什么解决问题的建议吗?提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2022-07-22 18:06:53

代码在checkbox1的情况下可以正常工作,但是对于不相关的复选框,您必须分别包含onchange函数,检查下面的解决方案。

不确定在不相关框的情况下将显示哪些一致性值,无论如何,一致性框是不被触及的,但是简单的调整将帮助您更改合适的逻辑,您的主要关注事项必须用下面的代码解决。

代码语言:javascript
复制
$(document).ready(function () {

var $checkboxes = $('#checklist td[class="list-checkbox"] :checkbox').not(':disabled')

$checkboxes.change(function () {
    var countCheckedCheckboxes = $checkboxes.filter(':checked').length,
    percentageCheckedCheckboxes = Math.round(countCheckedCheckboxes / $checkboxes.length * 100);

    $('#count-checked-checkboxes').text(countCheckedCheckboxes);
    $("#percentage-checked-checkboxes").text(percentageCheckedCheckboxes);
});

var $checkboxesNotRelevant = $('#checklist td[class="relevant-checkbox"] :checkbox ').not(':disabled')
$checkboxesNotRelevant.change(function () {
    var countCheckboxesNotRelevant = $checkboxesNotRelevant.filter(':checked').length,
    percentageCheckedCheckboxes = Math.round(countCheckboxesNotRelevant / $checkboxes.length * 100);

    $('#count-disabled-checkboxes').text(countCheckboxesNotRelevant);
});

$("input").change(function () {
    var target = $(this).data('target');
    if (target) $("input[data-disenable='" + target + "']").prop("disabled", $(this).is(':checked'));
});

$("#count-total-checkboxes").text($checkboxes.length);


});

如果您也希望基于禁用框更改一致性值,请将下面的代码添加为第二个onchange块结束前的结束行。

代码语言:javascript
复制
$("#percentage-checked-checkboxes").text(percentageCheckedCheckboxes);

可用于更多查询。

票数 0
EN

Stack Overflow用户

发布于 2022-07-25 07:19:46

为了更好的理解,我分叉了我的小小提琴,并添加了一些更相关的信息:这背后的想法是有一个可访问性检查表,例如,一个设计师谁想检查WCAG的一致性。在所有情况下,一个网页将有一个图标,例如,或视频。

在这些情况下,检查这些规则与总体一致性无关:

jsfiddle.net/jonasfuchs/3fnoa2c8/18

我将最后一个复选框设置为手动禁用,它的工作方式如下:

<input type="checkbox" id="rule-4" name="plain-language" data-disenable='rule-4' value="rule-4" class="form-selection-control" disabled />

我想通过选中“不相关”复选框来实现这一点。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73082338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档