javascript - 如何更改 radio 检查上的 FA 图标前缀?

标签 javascript jquery

我想更改i前缀来自 farfas当 radio 是checked时.

如果输入为checkboxes,则此代码有效。 ,但当它们是 radio's 时将不起作用。第一次单击后始终保持选中状态。

如何让此函数像针对复选框一样针对单选按钮运行?

$(document).ready(function() {
  $('input[name="sort"]').change(function() {
    if (
      $(this)
      .closest('[class*="list-"]')
      .is(".list-alt")
    ) {
      if ($(this).is(":checked")) {
        $(this)
          .siblings("[data-icon]")
          .attr("data-prefix", "fas")
          .closest(".launch-icon")
          .addClass("checked");
      } else {
        $(this)
          .siblings("[data-icon]")
          .attr("data-prefix", "far")
          .closest(".launch-icon")
          .removeClass("checked");
      }
    }
  });
  $('input[name="sort"]').change();
});
.list-alt {
  display: flex;
}

.launch-icon {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  cursor: pointer;
  font-size: 22px;
  padding: 12px
}

.launch-icon:hover,
.launch-icon.checked,
.launch-icon.checked [data-icon] {
  color: #03a9f4;
}
<script src="https://pro.fontawesome.com/releases/v5.1.0/js/all.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="list-alt">
  <label class="launch-icon">
        <input type="radio" name="sort">
        <i class="far fa-shopping-bag"></i>
      </label>
  <label class="launch-icon">
        <input type="radio" name="sort">
        <i class="far fa-stream"></i>
      </label>
  <label class="launch-icon">
        <input type="radio" name="sort">
        <i class="far fa-train"></i>
      </label>
</div>

最佳答案

我认为这就是您正在寻找的。你的 JavaScript 看起来有点困惑,所以我做了一些改变。

$(function() {
  var allRadios = $(".list-alt input[type='radio']");
  $(allRadios).click(function() {
    // reset all checkbox to original state
    allRadios.each(function(i, elm) {
      var icon = $(elm).next("svg");
      icon.attr("data-prefix", "far");
      $(elm).parents("label").removeClass("checked");
    });
    
    // change the checked checkbox's icon
    $(this).next("svg").attr("data-prefix", "fas");
    $(this).parents("label").addClass("checked");
  });
});
.list-alt {
  display: flex;
}

.launch-icon {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  cursor: pointer;
  font-size: 22px;
  padding: 12px
}

.launch-icon:hover,
.launch-icon.checked,
.launch-icon.checked [data-icon] {
  color: #03a9f4;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://pro.fontawesome.com/releases/v5.1.0/js/all.js"></script>

<div class="list-alt">
  <label class="launch-icon">
    <input type="radio" name="sort">
    <i class="far fa-shopping-bag"></i>
  </label>
  <label class="launch-icon">
    <input type="radio" name="sort">
    <i class="far fa-stream"></i>
  </label>
  <label class="launch-icon">
    <input type="radio" name="sort">
    <i class="far fa-train"></i>
  </label>
</div>

关于javascript - 如何更改 radio 检查上的 FA 图标前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454100/

相关文章:

javascript - Knockout.js - 如何在计算的可观察对象中获取可观察属性的值?

javascript - 为什么动态值没有填充在自动完成组合框中?

javascript - 将选择框值附加到文本区域

javascript - jquery 悬停类更改无法正常工作

javascript - kue - 处理不同文件中的作业

javascript - 不允许写入特殊字符

javascript - jQuery @ 运算符?

javascript - 动态更改表单提交函数后,会导致旧函数被调用一次,然后调用新函数

javascript - 在 Div 中随机移动元素

javascript - 类型错误 : GMaps is not a constructor