You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击指定链接切换复选框的全选/全取消状态?

实现复选框全选/取消全选功能

需求说明

点击class为dummy-select-deselect-finishing-options的<a>标签,切换.field--name-field-finishing-option内所有复选框的选中状态(全选/取消全选)。

现有HTML结构

<div class="field--name-field-finishing">
  <a href="" class="dummy-select-deselect-finishing-options">全选/取消全选</a>
  
  <div class="field--name-field-finishing-option">
    <div class="form-checkboxes">
      
      <div class="js-form-type-checkbox">
      <input type="checkbox" id="option-29202" name="field_finishing[29202]" value="29202" checked="checked" class="form-checkbox">
      <label for="option-29202" class="option"><span class="views-field-field-image">
        <span class="field-content"> 
          <img loading="lazy" src="/path" typeof="Image">
        </span>
      </span>
        <span class="views-field-name"><span class="field-content">Hem Tags</span></span>
      </label>
    </div>
      
      <div class="js-form-type-checkbox">
        <input type="checkbox" id="option-29203" name="field_finishing[29203]" value="29203" checked="checked" class="form-checkbox">
        <label for="option-29203" class="option"><span class="views-field-field-image">
          <span class="field-content">
            <img loading="lazy" src="/path" typeof="Image">
          </span></span>
          <span class="views-field-name">
            <span class="field-content">Hang Tags</span>
            </span>
        </label>
      </div>
      
      <div class="js-form-type-checkbox">
        <input type="checkbox" id="option-29204" name="field_finishing[29204]" value="29204" checked="checked" class="form-checkbox">
        <label for="option-29204" class="option"><span class="views-field-field-image">
          <span class="field-content">
            <img loading="lazy" src="/path"  typeof="Image">
          </span>
          </span><span class="views-field-name">
          <span class="field-content">Folding and Bagging</span>
        </span>
        </label>
      </div>
      
    </div>
  </div>

</div>

尝试过的无效代码

JavaScript代码

$(document).ready(function() {
  $(".dummy-select-deselect-finishing-options").click(function() {
    var checkboxes = $(".field--name-field-finishing-option input[type='checkbox']");
    var isChecked = checkboxes.first().prop("checked");
    checkboxes.prop("checked", !isChecked);
  });
});

CSS代码

.field--name-field-finishing-option span.fieldset-legend {
     font-size: rem(30px);
     font-weight: bold;
}
 .field--name-field-finishing-option .form-checkboxes {
     display: flex;
     flex-wrap: wrap;
     margin: rem(-10px);
}
 .field--name-field-finishing-option .form-checkboxes .form-item {
     display: flex;
     flex-direction: row;
     width: 50%;
     position: relative;
     padding: rem(10px);
}
 .field--name-field-finishing-option .form-checkboxes .form-item input {
     border-radius: 50%;
     padding: unset;
     box-shadow: unset;
     border: 1px solid getColor(neutral, 5);
     width: rem(25px);
     height: rem(25px);
     position: absolute;
     top: rem(26px);
     right: rem(26px);
}
 .field--name-field-finishing-option .form-checkboxes .form-item label {
     order: -1;
     display: flex;
     align-items: center;
     box-shadow: 0 rem(1px) rem(4px) rem(3px) #000;
     border-radius: rem(30px);
     width: 100%;
}
 .field--name-field-finishing-option .form-checkboxes .form-item label .views-field-name {
     padding-left: rem(17px);
     font-size: rem(18px);
}
 .field--name-field-finishing-option .form-checkboxes .form-item label img {
     border-radius: rem(30px) 0 0 rem(30px);
}
 .field--name-field-finishing-option .form-checkboxes .form-item input:checked + label {
     background: getColor(blue, 2);
     border: 1px solid getColor(blue, 5);
}

修复方案

你的代码逻辑本身没问题,但没有阻止a标签的默认跳转行为,点击后页面会刷新,导致复选框状态重置,看起来功能没生效。只需要在点击事件里添加阻止默认行为的代码即可:

$(document).ready(function() {
  $(".dummy-select-deselect-finishing-options").click(function(e) {
    // 阻止a标签默认跳转行为
    e.preventDefault();
    var checkboxes = $(".field--name-field-finishing-option input[type='checkbox']");
    var isChecked = checkboxes.first().prop("checked");
    checkboxes.prop("checked", !isChecked);
  });
});

如果需要让选择器更精准(避免全局匹配),可以通过父元素定位复选框:

$(document).ready(function() {
  $(".dummy-select-deselect-finishing-options").click(function(e) {
    e.preventDefault();
    // 从当前a标签的父容器下查找目标复选框,避免全局干扰
    var $parentContainer = $(this).closest(".field--name-field-finishing");
    var checkboxes = $parentContainer.find(".field--name-field-finishing-option input[type='checkbox']");
    var isChecked = checkboxes.first().prop("checked");
    checkboxes.prop("checked", !isChecked);
  });
});

修改后,点击链接时会正常切换复选框状态,同时CSS中:checked对应的样式也会自动同步生效。


内容的提问来源于stack exchange,提问作者nathan111777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:29:52