【问题标题】:Make radio buttons checked /unchecked选中/取消选中单选按钮
【发布时间】:2019-05-28 20:30:27
【问题描述】:

$("input[type='radio']").each(function() {
  if ($(this).is(":checked")) {
    $(this).css('background', 'blue');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" data="cool" name="cool" checked="checked">
<input type="radio" data="cool" name="cool">
<input type="radio" data="cool" name="cool">

我的方法是首先检查我的输入是否为:checked,如果是,则放置一些带有背景颜色的 CSS 类。我实现了这一点,接下来我想要在用户单击单选按钮或任何其他(更好的)想法时删除 :checked。提交表单后,此代码检查输入是否为:checked,问题是当我想选择另一个单选按钮时,我得到如下内容:

1和2单选按钮被选中,应该只有2个:checked

【问题讨论】:

  • 为什么要关闭这个?这个问题很好
  • 如果您在这里找到了解决方案,请选择一个答案。

标签: javascript jquery html


【解决方案1】:

您需要添加 else 来移除蓝色,例如:

$("input[type='radio']").each(function () {
   if ($(this).is(":checked")) {
      $(this).css('background', 'blue');
   }else{
     $(this).css('background', 'white');
   }
});

您还可以为这些收音机附加点击事件,例如:

$("body").on("click", "input[type='radio']", function () {
    $("input[type='radio']").css('background', 'white');
    $(this).css('background', 'blue');
});

【讨论】:

  • 谢谢。现在我无法选择单选按钮。即使选中了收音机,它也将背景颜色设置为白色=“已检查”
  • 现在我可以选择 1 个输入。我有 15 个单选按钮,但使用此代码我只能选择一个。
  • 你有一个单选按钮,它一次选择一个,这不是你想要的吗?
  • 我有一个表单,首先我需要选择一些单选按钮,然后我提交表单。当页面重新加载时,我检查我的输入是否:选中,是否设置背景颜色。没关系,但是当我想将单选按钮从 1 更改为 2 时,我会检查两个收音机。上图。
  • 这是更新后的小提琴,jsfiddle.net/z6fLk1pa 你并不是在 OP 中提到你有一组单独的单选按钮。
【解决方案2】:

您的 JS 的问题是您永远不会从任何未选中的复选框中删除该类。另请注意,each() 仅在页面加载时运行(假设您没有将它放在事件处理程序中,但问题没有显示),因此您需要在 change 事件处理程序中运行您的逻辑:

var $radio = $("input[type='radio']").on('change', function() {
  $radio.removeClass('blue');
  $(this).toggleClass('blue', this.checked);
});

话虽如此,使用 CSS 可以更简单地实现您想要做的事情:

input {
  visibility: hidden;
}
input:before {
  content: '';
  position: absolute;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #CCC;
  visibility: visible;
}

input:checked:before {
  background-color: blue;
}
<input type="radio" data="cool" name="cool" checked="checked">
<input type="radio" data="cool" name="cool">
<input type="radio" data="cool" name="cool">

【讨论】:

  • 谢谢。提交表单时,这段代码不检查是否有:checked to input?
  • 为此,您可以检查已检查输入的数量:stackoverflow.com/questions/15530582/…
  • 还有一些问题,比如他没有使用click/change事件,而是使用每个事件,这意味着用户实际上从未点击过单选按钮,那么如何提交表单后是否会提交正确的值。
  • 自定义和颜色是次要的。
  • 鉴于问题中的逻辑点完全是关于改变收音机的背景,因此认为定制和颜色是重点。你关于使用每个的观点是有效的
【解决方案3】:

我认为您的代码的问题在于您使用的是each 事件而不是changeclick 事件。这意味着您正在尝试更改单选按钮的颜色,甚至在用户执行任何操作之前。阅读以下代码,这将解决提交表单和自定义单选按钮的问题:

$(".radio-button").click(function() {
  $(this).addClass("blue-background");
  $(this).siblings().removeClass("blue-background");
  var radioID = $(this).data('radio');
  $('#' + radioID).attr("checked", "checked");
  if ($('#' + radioID).siblings(":checked")) {
    $('#' + radioID).siblings().removeAttr("checked");
  }
});
.blue-background {
  background-color: blue;
}

input[type='radio'] {
  visibility: hidden;
}

.radio-button {
  height: 15px;
  width: 15px;
  margin: 5px;
  border-radius: 50%;
  display: inline-block;
  border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="parent">
  <input type="radio" id="radio1" data="cool" name="cool" checked="checked">
  <input type="radio" id="radio2" data="cool" name="cool">
  <input type="radio" id="radio3" data="cool" name="cool">
  <div class="radio-button" data-radio="radio1"></div>
  <div class="radio-button" data-radio="radio2"></div>
  <div class="radio-button" data-radio="radio3"></div>
</div>

我希望这会有所帮助。

【讨论】:

  • 这里的问题是以某种方式将选定的 div 提交到表单
  • @RoryMcCrossan 好的,让我在这种情况下更新我的答案
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 2012-03-17
  • 2020-04-29
  • 2016-01-23
  • 2012-01-31
  • 2023-03-29
  • 2017-05-05
相关资源
最近更新 更多