【问题标题】:Radio button adding class element单选按钮添加类元素
【发布时间】:2017-06-09 23:42:19
【问题描述】:

我需要创建 2 个单选按钮。

当用户在页面上时,未选中单选按钮。
单选按钮内容内部是 CTA 按钮,该按钮将变灰
只有当用户选择收音机时,CTA 按钮才会改变颜色。

我已经为我想使用的按钮创建了样式,而不是在选择单选按钮时来回切换。

这是一个例子。
有人可以指导我如何添加和删除类,以便在 jQuery 中切换颜色吗?

https://codepen.io/Ambuja/pen/BZNzRx

$('input').prop('checked', false);
$('span a').css('background-color','grey')
$('input').on('change', function () {
    if ($(this).is(':checked')) {
        var dt = $(this).data('title')
        $('span a').css('background-color','grey')
        $('#' + dt).css('background-color','orange')
        console.log(dt)
    }
})
label {
    font-family: $verdana;
    font-size:12px;
    margin-left:13px;
    font-weight: normal;
}
 
 
 
}
input[type="radio"]:checked + label:before {
 
    text-align: center;
}
.high {
    color:yellow;
}
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="row">
  <div class="medium-6 large-6 columns">
    <input type="radio" name="form-radio" id="workshops" value="high" data-title="workshopcl" checked="">
    <label id="workshoping" for="workshops">Workshops</label>

    <p>This is random text</p>

    <span style="
    background-color: grey;
"><a href="#" id="workshopcl" style="background-color: orange;">WorkShops</a></span>
  </div>

  <div class="medium-6 large-6 columns">
    <input type="radio" name="form-radio" id="courses" data-title="cou" value="option2">
    <label for="courses">Courses</label>
    <br>
    <p>This is a random text</p>



    <span><a href="#" id="cou" class="" style="background-color: transparent;">Courses</a></span>

  </div>

</div>

【问题讨论】:

  • 您可以使用 removeClass 和 addClass。或者,还有一个 jquery UI 插件,其中包含 switchClass (api.jqueryui.com/switchclass)

标签: jquery html css radio-button


【解决方案1】:

$('input').prop('checked', false);
$('span a').addClass('greyColor');
$('input').on('change', function (el) {
  debugger;
    if ($(this).is(':checked')) {
        var dt = $(this).data('title');
        //if you have only 2 radio btn, you could use the below commented code.

        //if(dt=="cou"){
          //  $('#cou').attr('href','https://www.google.com');
          //  $('#cou').addClass('orangeColor');
          //  $('#workshopcl').removeClass('orangeColor');
          //  $('#workshopcl').attr('href','#');
        //}
        //else{
          //  $('#workshopcl').addClass('orangeColor');
          //  $('#workshopcl').attr('href','https://www.gmail.com');
          //  $('#cou').removeClass('orangeColor');
          //  $('#cou').attr('href','#');
//        }


        $('span a').removeClass('orangeColor');
        $('#' + dt).addClass('orangeColor');
        $('span a').attr('href','#');
        if(dt=="cou"){
            $('#' + dt).attr('href','https://www.google.com');
        }
        else{ // if you have more than 2 radio buttons then use if-else-if statement.
            $('#' + dt).attr('href','https://www.gmail.com');
        }
    }
})
label {
    font-family: $verdana;
    font-size:12px;
    margin-left:13px;
    font-weight: normal;
}
 
input[type="radio"]:checked + label:before {
 
    text-align: center;
}
.high {
    color:yellow;
}

.greyColor{
  background-color:grey;
}

.orangeColor{
  background-color:orange;
}
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
  <div class="medium-6 large-6 columns">
    <input type="radio" name="form-radio" id="workshops" value="high" data-title="workshopcl" checked="">
<label id="workshoping" for="workshops">Workshops</label>
 
                       <p>This is random text</p>

       <span><a href="#" id="workshopcl">WorkShops</a></span>
                        </div>
 
  <div class="medium-6 large-6 columns">
<input type="radio" name="form-radio" id="courses" data-title="cou" value="option2">
<label for="courses">Courses</label>
<br>
<p>This is a random text</p>

 
             
                        <span><a href="#" id="cou">Courses</a></span>
                       
                        </div>
                       
  </div>

【讨论】:

  • 因此,一旦 CTA 按钮突出显示为橙色,就需要将链接添加到 CTA 中,我该如何实现呢?
  • @code21 我已更新代码以在选择单选按钮后添加链接。
  • 谢谢pawan,感激不尽,边做边学
  • 这是学习的唯一方法 :) 由于您是 stackoverflow 的新手,所以我的建议是接受最合适的答案,并为每一个对您有帮助的答案投票。
  • 我同意,在您的代码中,链接只是“google.com”,如果我需要为橙色链接添加 2 个不同的网址,该怎么办
【解决方案2】:

只需使用 jQuery 方法 removeClass()addClass()

通常,当您想从一组元素中删除一个活动类并将该活动类应用到一个新元素时,您首先从该组中的所有元素中删除该活动类,然后将该类添加到选定元素。虽然这次我们会做一些不同的事情,因为有额外的标记复杂性和我们可以挂钩的data- 属性。

通过这个解决方案,我利用了 data-title 属性包含关联锚点的 ID 值这一事实。在input 的每次更改中,我们从$active 中存储的锚点中删除活动类,然后使用data-title 的值来选择关联的锚点并应用活动类。

**注意:对您的标记 (HTML) 进行了一些改进。

var $active;

$( 'input' ).on( 'change', function ( e ) {
  
  var $this = $( this ),
      ctaID = $this.data( 'title' );
      
  if ( $active ) $active.removeClass( 'active' );
  
  $active = $( '#' + ctaID ).addClass( 'active' );

} );
label {
  font-family: Verdana, sans-serif;
  font-size: 12px;
  margin-left: 13px;
  font-weight: normal;
}

.cta {
  background-color: gray;
}
.active {
  background-color: orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<div class="row">

  <div class="medium-6 large-6 columns">
  
    <label id="workshoping" for="workshops">
      <input id="workshops" class="radio" type="radio" name="form-radio" value="high" data-title="workshopcl">
      Workshops
    </label>
    <p>This is random text</p>
    <a href="#" id="workshopcl" class="cta">WorkShops</a>
    
  </div>

  <div class="medium-6 large-6 columns">
  
    <label for="courses">
      <input id="courses" class="radio" type="radio" name="form-radio" data-title="cou" value="option2">
      Courses
    </label>
    <p>This is a random text</p>
    <a href="#" id="cou" class="cta">Courses</a>

  </div>

</div>

【讨论】:

  • 谢谢,我想这就是我要找的:)
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 2019-05-19
  • 2021-04-23
  • 2013-04-21
  • 2013-08-09
  • 2012-06-27
  • 1970-01-01
  • 2012-09-26
相关资源
最近更新 更多