【问题标题】:jQuery to add CSS class to selected radio buttonjQuery将CSS类添加到选定的单选按钮
【发布时间】:2018-11-20 12:41:39
【问题描述】:

我正在尝试根据选择的单选按钮向单选按钮添加 CSS 类。

$("input[type=radio][name=align]").on('change', function() {
  var radVal = $("input[type=radio][name=align]").val();
  if (radVal == 'center') {
    $(".tlt1").addClass('centerCssClass').change();
    $(".tlt1").removeClass('topCssClass').change();
  } else if (radVal == 'top') {
    $(".tlt1").addClass('topCssClass').change();
    $(".tlt1").removeClass('centerCssClass').change();
  }
});
.centerCssClass {
  background-color: blue;
}

.topCssClass {
  background-color: red;
}

.tlt1 {
  float: left;
  height: 300px;
  width: 300px;
  background-color: orange;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" name="align" value="center">Center<br>
<input type="radio" name="align" value="top">Top<br>
<div class="tlt1"></div>

【问题讨论】:

    标签: jquery css radio-button


    【解决方案1】:

    这里有两个问题。首先,您从中检索值的选择器不正确。您应该使用this 引用从单击的单选按钮中获取值。

    其次,您需要使 CSS 类更具体,以便它们覆盖原来的 background-color 设置 .tlt1。试试这个:

    var $tlt = $(".tlt1");
    
    $("input[type=radio][name=align]").on('change', function() {
      var radVal = $(this).val();
      if (radVal == 'center') {
        $tlt.addClass('centerCssClass').removeClass('topCssClass');
      } else if (radVal == 'top') {
        $tlt.addClass('topCssClass').removeClass('centerCssClass')
      }
    });
    .tlt1 {
      float: left;
      height: 300px;
      width: 300px;
      background-color: orange;
    }
    
    .tlt1.centerCssClass {
      background-color: blue;
    }
    
    .tlt1.topCssClass {
      background-color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input type="radio" name="align" value="center">Center<br>
    <input type="radio" name="align" value="top">Top<br>
    <div class="tlt1"></div>

    请注意,您也不需要在 div 元素上触发 change() 事件,因为它是多余的。

    【讨论】:

    • 感谢@Rory 的详细解释。这个答案解决了我的问题,让我对发布的问题有了深入的了解。谢谢兄弟。
    • 这就是我们在这里的目的:)
    【解决方案2】:

    因为tlt1的背景色不能被覆盖

    所以你必须在 centerCssClass,topCssClass css 之后添加!important

    $("input[type=radio][name=align]").on('change', function() {
      var radVal = $(this).val();
      var tlt1 = $("#tlt1");
      if (radVal == 'center') {
        tlt1.addClass('centerCssClass').change();
        tlt1.removeClass('topCssClass').change();
      } else if (radVal == 'top') {
        tlt1.addClass('topCssClass').change();
        tlt1.removeClass('centerCssClass').change();
      }
    });
    .centerCssClass {
      background-color: blue !important;
    }
    
    .topCssClass {
      background-color: red !important;
    }
    
    .tlt1 {
      float: left;
      height: 300px;
      width: 300px;
      background-color: orange;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="radio" name="align" value="center">Center<br>
    <input type="radio" name="align" value="top">Top<br>
    <div id='tlt1' class="tlt1"></div>

    【讨论】:

    【解决方案3】:

    您需要使用:checked 选择器来获取selected 单选按钮的值并稍微更改CSS 类声明以覆盖background-color

    $("input[type=radio][name=align]").on('change', function() {
      var radVal = $("input[type=radio][name=align]:checked").val();
      if (radVal == 'center') {
        $(".tlt1").addClass('centerCssClass').removeClass('topCssClass');
      } else if (radVal == 'top') {
        $(".tlt1").addClass('topCssClass').removeClass('centerCssClass');
      }
    });
    .tlt1.centerCssClass {
      background-color: blue;
    }
    
    .tlt1.topCssClass {
      background-color: red;
    }
    
    .tlt1 {
      float: left;
      height: 300px;
      width: 300px;
      background-color: orange;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <input type="radio" name="align" value="center">Center<br>
    <input type="radio" name="align" value="top">Top<br>
    <div class="tlt1">tlt1</div>

    【讨论】:

    • 感谢@Satpal 发布详细的答案。感谢您的宝贵时间,祝您有美好的一天兄弟:)
    • @pv619,很高兴我能帮上忙
    【解决方案4】:

    试试这个

    使用id 而不是class tlt1

    $("input[type=radio][name=align]").on('change', function() {
      var radVal = $(this).val();
      if (radVal == "center") {
        $("#tlt1").removeClass('topCssClass').change();
        $("#tlt1").addClass('centerCssClass').change();
        $("#tlt1").removeClass('tlt1');
      } else {
        $("#tlt1").removeClass('centerCssClass').change();
        $("#tlt1").addClass('topCssClass').change();
        $("#tlt1").removeClass('tlt1');
      }
    });
    .centerCssClass {
      float: left;
      height: 300px;
      width: 300px;
      background-color: blue;
    }
    
    .topCssClass {
      float: left;
      height: 300px;
      width: 300px;
      background-color: red;
    }
    
    .tlt1 {
      float: left;
      height: 300px;
      width: 300px;
      background-color: orange;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="radio" name="align" value="center">Center<br>
    <input type="radio" name="align" value="top">Top<br>
    <div class="tlt1" id="tlt1"></div>

    【讨论】:

    • 谢谢你的回答,祝你有美好的一天:)
    【解决方案5】:

    您的解决方案是正确的,就在change 事件中将var radVal = $("input[type=radio][name=align]").val(); 更改为var radVal = $(this).val();

    因为现在你得到的第一个元素的值是 input 具有属性 type='radio'name='align'。因此,您案例中的第一个元素具有价值中心,因此它始终是中心。通过使用$(this),您可以获得实际更改的元素。

    另外您不必在.tlt1 元素上触发change() 事件。

    最后在您的 CSS 中,较低的值比较高的值更受尊重。这就是为什么你的背景没有改变。因为.tlt1 班级的背景比centerCssClass 班级更重要。

    这是一个工作示例

    $("input[type=radio][name=align]").on('change', function () {
        var radVal = $(this).val();
        if (radVal == 'center') {
            $(".tlt1").addClass('centerCssClass');
            $(".tlt1").removeClass('topCssClass');
        } else if (radVal == 'top') {
            $(".tlt1").addClass('topCssClass');
            $(".tlt1").removeClass('centerCssClass');
        }
    });
    .tlt1 {
      float: left;
      height: 300px;
      width: 300px;
      background-color: orange;
    }
    
    .centerCssClass {
      background-color: blue;
    }
    
    .topCssClass {
      background-color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="radio" name="align" value="center">Center<br>
    <input type="radio" name="align" value="top">Top<br>
    <div class="tlt1"></div>

    【讨论】:

    • 感谢兄弟对$this 值的深入回答。这很有意义,并帮助我获得了有关该问题的更多信息。祝你有美好的一天兄弟:)
    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2012-08-06
    • 2023-02-10
    • 2018-09-14
    • 2017-07-13
    • 2013-10-27
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多