2017-08-16 95 views
0

目的更改所选根据它单选按钮背景值

试图把一个已经样式等的按钮,使得当在其上的用户点击,颜色会根据改变无线电输入的背景颜色到无线电价值。

预期的结果

当点击按钮“中性”,改变按钮的背景颜色为白色。
点击按钮“GOOD”后,将按钮背景颜色更改为绿色。
当点击“WATCHLIST”按钮时,将按钮背景更改为黄色。
当点击“UNDER MONOTORING”按钮时,将按钮背景改为红色。

问题

它不会相应地改变按钮的背景,这就是我想要做的事。

在此欣赏一些帮助。预先感谢。

$(document).ready(function() { 
 
    $('label').click(function() { 
 
    if ($("input:radio[name='category']:checked").val() == 'W') { 
 
     $(this).addClass('whiteBG'); 
 
    } 
 
    if ($("input:radio[name='category']:checked").val() == 'G') { 
 
     $(this).addClass('greenBG'); 
 
    } 
 
    if ($("input:radio[name='category']:checked").val() == 'Y') { 
 
     $(this).addClass('yellowBG'); 
 
    } 
 
    if ($("input:radio[name='category']:checked").val() == 'R') { 
 
     $(this).addClass('redBG'); 
 
    } 
 
    }); 
 
});
input[type=radio], 
 
input[type=checkbox] { 
 
    display: none; 
 
} 
 

 
label { 
 
    display: block; 
 
    appearance: button; 
 
    -webkit-appearance: button; 
 
    -moz-appearance: button; 
 
    -ms-appearance: button; 
 
    font-family: 'Roboto', sans-serif; 
 
    font-weight: 400; 
 
    background: #DDDDDD; 
 
    font-size: 1.6rem; 
 
    color: #111111; 
 
    border: 2px solid #AAAAAA; 
 
    padding: 8px; 
 
    width: 40%; 
 
    margin: 0 auto; 
 
    text-align: center; 
 
    transition: all 0.7s ease-in-out; 
 
} 
 

 
.whiteBG { 
 
    background-color: #FFF000; 
 
} 
 

 
.greenBG { 
 
    background-color: #0F0000; 
 
} 
 

 
.yellowBG { 
 
    background-color: #FF0000; 
 
} 
 

 
.redBG { 
 
    background-color: #F00000; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form> 
 
    <fieldset data-role="controlgroup"> 
 
    <legend>PERSON CATEGORY SELECTION</legend> 
 
    <label for="neutral"> 
 
       <input type="radio" class="button" id="neutral" name="category" value="W" >NEUTRAL</input> 
 
      </label> 
 
    <label for="good"> 
 
       <input type="radio" class="button" id="good" name="category" value="G">GOOD</input> 
 
      </label> 
 
    <label for="watchlist"> 
 
       <input type="radio" class="button" id="watchlist" name="category" value="Y">WATCHLIST</input> 
 
      </label> 
 
    <label for="monitor"> 
 
       <input type="radio" class="button" id="monitor \t " name="category" value="R">UNDER MONOTORING</input> 
 
      </label> 
 
    </fieldset> 
 
</form>

+0

你是说点击其中一个按钮应该将*那个*按钮的背景色改成指定的颜色,并将其他按钮改回灰色? – nnnnnn

+0

是的,其他人应该变回灰色。 – SiChiPan

回答

1

问题在你的代码:

  • 的,你在你的CSS有没有反映出你试图指定颜色#颜色代码。这些十六进制代码需要缩写为三位RGB值或六位RGB值(每种颜色有两位数字),即#RGB#RRGGBB,但它就像是通过在两端添加“000”来混合两个选项否则会是您想要的颜色的正确的三位十六进制代码。请从每一个中删除尾部的000,或更改为正确的六位十六进制代码。
  • 您没有任何代码可以在单击其他按钮时从按钮中删除该类。

你的JS代码似乎过于复杂。我会将点击处理程序绑定到单选按钮本身,因为然后this.value会为您提供刚才单击的按钮的值,从而大大简化了您的if条件。您可以使用$(this).parent()然后转到标签元素进行设置。

我介绍了一个名为buttons变量,它是一个包含所有按钮的jQuery对象,因为那时处理程序中,你可以说buttons.not(this).parent()获取包含所有其他按钮的父标签要素的jQuery对象和删除从他们的颜色类,使他们再次变成灰色。

$(document).ready(function() { 
 
    var buttons = $("input:radio[name='category']").click(function() { 
 
    buttons.not(this).parent().removeClass('whiteBG greenBG yellowBG redBG'); 
 
    var label = $(this).parent(); 
 
    if (this.value == 'W') { 
 
     label.addClass('whiteBG'); 
 
    } else if (this.value == 'G') { 
 
     label.addClass('greenBG'); 
 
    } else if (this.value == 'Y') { 
 
     label.addClass('yellowBG'); 
 
    } else if (this.value == 'R') { 
 
     label.addClass('redBG'); 
 
    } 
 
    }); 
 
});
input[type=radio], input[type=checkbox] { display: none; } 
 

 
label { 
 
    display: block; 
 
    appearance: button; -webkit-appearance: button; -moz-appearance: button; -ms-appearance: button; 
 
    font-family: 'Roboto', sans-serif; font-weight: 400; 
 
    background: #DDDDDD; 
 
    font-size: 1.6rem; 
 
    color: #111111; 
 
    border: 2px solid #AAAAAA; 
 
    padding: 8px; 
 
    width: 40%; 
 
    margin: 0 auto; 
 
    text-align: center; 
 
    transition: all 0.7s ease-in-out; 
 
} 
 

 
.whiteBG { background-color: #FFF; } 
 

 
.greenBG { background-color: #0F0; } 
 

 
.yellowBG { background-color: #FF0; } 
 

 
.redBG { background-color: #F00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form> 
 
    <fieldset data-role="controlgroup"> 
 
    <legend>PERSON CATEGORY SELECTION</legend> 
 
    <label for="neutral"> 
 
     <input type="radio" class="button" id="neutral" name="category" value="W" >NEUTRAL</input> 
 
    </label> 
 
    <label for="good"> 
 
     <input type="radio" class="button" id="good" name="category" value="G">GOOD</input> 
 
    </label> 
 
    <label for="watchlist"> 
 
     <input type="radio" class="button" id="watchlist" name="category" value="Y">WATCHLIST</input> 
 
    </label> 
 
    <label for="monitor"> 
 
     <input type="radio" class="button" id="monitor" name="category" value="R">UNDER MONOTORING</input> 
 
    </label> 
 
    </fieldset> 
 
</form>

+0

如果我有一个从数据库读取的类别值让我们说“R”,如何设置按钮检查或选择页面加载? – SiChiPan

+0

您可以通过在选择器中使用其值属性来触发该特定按钮上的点击事件:假设所需的“R”值在变量'savedVal'中,则类似于'$(“input:radio [name ='category' ] [value ='“+ savedVal +'']”)。click()'(添加到您的现有文档准备好后的另一个代码之后)。 – nnnnnn

+0

我的意思是我从其他页面传递值“R”,我希望选择“UNDER MONITORING”按钮并将背景设置为红色作为默认值。 – SiChiPan

1

为了使您的background-color显示出来,你应该设置labelappearance属性none而不是button

label { 
    appearance: none; 
    -webkit-appearance: none; 
    -moz-appearance: none; 
    -ms-appearance: none; 
} 

您应该从button你设置新的CSS类之前取消对所有点击CSS类。

+0

*“为了让你的背景色显示出来”* - 在OP的片段中,不同的背景色已经显示出来,而不是预期的颜色。将'appearance'改为'none'对颜色没有帮助,而且OP显然希望标签看起来像按钮。我不确定为什么当我显示的代码按原样运行时,试图将该更改编辑为* my *答案。 – nnnnnn

+0

@nnnnnn我不知道你在使用哪个浏览器,但是在OP和你的代码片段中,Chrome并没有显示颜色。这就是我编辑你的答案的原因。我认为无法看到颜色也是一个大问题。 – brian17han

+0

我只在Chrome中测试过。为我工作得很好。 – nnnnnn