【问题标题】:Check or uncheck a checkbox if another one is checked with jQuery如果使用 jQuery 选中另一个复选框,则选中或取消选中一个复选框
【发布时间】:2018-05-07 17:22:29
【问题描述】:

我有一个基本的 if/else 语句,用于检查是否检查了两个输入,如果是,则“禁用”的第三个复选框状态变为 false 并且可以检查。我希望一旦选中,如果其他复选框未选中,则此复选框将再次未选中,但它只是在维护检查时被禁用。

我的代码:

$("#cvLinkedInAssessmentCheck :input, #rolePlayingTalentCheck :input").change(function(){
        if( $(this).is(':checked') ){
            $("#minutosTalentoCheck :input").attr("disabled", false);
            $("#minutosTalentoCheck").css("opacity", "1");
        } else {
            $("#minutosTalentoCheck").prop('checked', false);
            $("#minutosTalentoCheck :input").attr("disabled", true);
            $("#minutosTalentoCheck").css("opacity", "0.3");

        }
    })

基本上,else语句中的这一行不起作用,我也试过用“attr”代替,但没有运气:

$("#minutosTalentoCheck").prop('checked', false);

【问题讨论】:

  • 因此您的 if 逻辑需要检查两个输入的 checked 状态,而不仅仅是更改的那个。
  • 另外作为旁注,不要这样做:$(this).is(':checked') 这可以只是this.checked 具有相同的结果
  • $("#minutosTalentoCheck :input").attr("disabled", true); 也有点令人困惑。通过您的代码,您尝试在 minutosTalentoCheck 上将选中的属性设置为 false,这表示它是一个单选框或复选框。但是您随后转身尝试找到要禁用的嵌套输入元素。单选框/复选框不能有嵌套的子项
  • 我的错,我将 (":input") 添加到该行以检查它是否有效并将其留在那里。我仍然不明白为什么它会起作用,因为我希望它禁用复选框,而不是取消选中它。

标签: jquery if-statement checkbox


【解决方案1】:

var $things = $("#cvLinkedInAssessmentCheck :input, #rolePlayingTalentCheck :input");

$things.on('change', function() {
  var $otherThing = $("#minutosTalentoCheck");
  
  //if either of the things are not checked, disable the other thing
  if ($things.not(':checked').length) {
    $otherThing
      .prop('checked', false)
      .attr("disabled", true)
      .css("opacity", "0.3");
  } else {
    $otherThing
      .prop("disabled", false)
      .css("opacity", "1");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cvLinkedInAssessmentCheck">
  <input type="checkbox"> Assessment
</div>
<div id="rolePlayingTalentCheck">
  <input type="checkbox"> Talent
</div>

<input type="checkbox" id="minutosTalentoCheck" disabled> Other thing

【讨论】:

  • 最后我只是错过了 $("#minutosTalentoCheck") 之后的 :input。只需添加它可以按预期工作,但我会选择您的答案,因为它也可以工作并且代码更干净。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2021-12-23
相关资源
最近更新 更多