简体   繁体   English

在单选按钮选择上切换背景色

[英]Toggle background color on radio button selection

I'm creating a quiz for test practice with lots of questions. 我正在为测试练习创建一个测验,其中包含很多问题。 Each question has five radio buttons, and among them there is only one right answer. 每个问题都有五个单选按钮,其中只有一个正确的答案。 In the first moment, the 5 options have a grey background. 最初,这5个选项的背景为灰色。 Once you click on a wrong option, it changes to red. 一旦您单击了错误的选项,它将变为红色。 If you click on another wrong option, it turns red and the previous one changes to grey. 如果单击另一个错误的选项,它将变为红色,而上一个变为灰色。 If you click on the right answer, it turns green and all the others stay grey. 如果您单击正确的答案,它将变为绿色,而其他所有选项均保持灰色。

 $(document).ready(function() { $("input[value='wrong']").click(function() { $("label").css("background-color", "red"); }); $("input[value='right']").click(function() { $("label").css("background-color", "green"); }); }); 
 .option { background: #eee; display: block; padding: 5px 10px 5px; color: #000; text-decoration: none; -moz-border-radius: 6px; -webkit-border-radius: 6px; -khtml-border-radius: 6px; border-radius: 6px; box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6); -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.25); border-bottom: 1px solid rgba(0, 0, 0, 0.25); position: relative; cursor: pointer; text-decoration: none; margin-bottom: 10px; } input[type="radio"] { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form class="form3"> <input type="radio" name="option" value="wrong" class="option1"> <label class="option">Option 1</label> <input type="radio" name="option" value="wrong" class="option2"> <label class="option">Option 2</label> <input type="radio" name="option" value="wrong" class="option3"> <label class="option">Option 3</label> <input type="radio" name="option" value="right" class="option4"> <label class="option">Option 4</label> <input type="radio" name="option" value="wrong" class="option5"> <label class="option">Option 5</label> </form> 

How can I get there with JQuery? 如何使用JQuery到达那里?

First you would need to change your markup. 首先,您需要更改标记。

Wrap each input inside the label . 将每个input包裹在label

Example: 例:

<label class="option">
   <input type="radio" name="option" value="wrong" class="option1">Option 1
</label>

Then change your CSS, to actually make the input clickable, but hidden: 然后更改您的CSS,以实际上使input可单击,但隐藏:

input[type="radio"] {
  opacity: 0;
  margin: 0;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  cursor: pointer;
}

We will be using two helper classes as well: 我们还将使用两个帮助程序类:

.right {
  background-color: green;
}
.wrong {
  background-color: red;
}

Finally change your JS to: 最后将您的JS更改为:

$(document).ready(function() {
  $("input[value='wrong']").click(function() {
    $(this).parent()
      .addClass("wrong") //Add class wrong to the label
      .siblings().removeClass("right wrong"); // Remove classes from the other labels.
  });
  $("input[value='right']").click(function() {
    $(this).parent()
      .addClass("right") //Add class right to the label
      .siblings().removeClass("right wrong");// Remove classes from the other labels.
  });
});

Code Snippet: 代码段:

 $(document).ready(function() { $("input[value='wrong']").click(function() { $(this).parent() .addClass("wrong") .siblings().removeClass("right wrong"); }); $("input[value='right']").click(function() { $(this).parent() .addClass("right") .siblings().removeClass("right wrong"); }); }); 
 .option { background: #eee; display: block; padding: 5px 10px 5px; color: #000; text-decoration: none; -moz-border-radius: 6px; -webkit-border-radius: 6px; -khtml-border-radius: 6px; border-radius: 6px; box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6); -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.25); border-bottom: 1px solid rgba(0, 0, 0, 0.25); position: relative; text-decoration: none; margin-bottom: 10px; } input[type="radio"] { opacity: 0; margin: 0; position: absolute; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: 100%; cursor: pointer; } .right { background-color: green; } .wrong { background-color: red; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form class="form3"> <label class="option"> <input type="radio" name="option" value="wrong" class="option1">Option 1 </label> <label class="option"> <input type="radio" name="option" value="wrong" class="option2">Option 2 </label> <label class="option"> <input type="radio" name="option" value="wrong" class="option3">Option 3 </label> <label class="option"> <input type="radio" name="option" value="right" class="option4">Option 4 </label> <label class="option"> <input type="radio" name="option" value="wrong" class="option5">Option 5 </label> </form> 

here is the working fiddle https://jsfiddle.net/0kexaguw/3/ 这是工作的小提琴https://jsfiddle.net/0kexaguw/3/

 $(document).ready(function() { $("input[type='radio']").on('click',function() { if($(this).attr('value')=="wrong"){ $(this).next().css("background", "red"); }else{ $(this).next().css("background", "green"); } }); }); 
 .option { background: #eee; display: block; padding: 5px 10px 5px; color: #000; text-decoration: none; -moz-border-radius: 6px; -webkit-border-radius: 6px; -khtml-border-radius: 6px; border-radius: 6px; box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6); -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.25); border-bottom: 1px solid rgba(0, 0, 0, 0.25); position: relative; cursor: pointer; text-decoration: none; margin-bottom: 10px; } input[type="radio"] { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form class="form3"> <input type="radio" name="option" value="wrong" class="option1"> <label class="option">Option 1</label> <input type="radio" name="option" value="wrong" class="option2"> <label class="option">Option 2</label> <input type="radio" name="option" value="wrong" class="option3"> <label class="option">Option 3</label> <input type="radio" name="option" value="right" class="option4"> <label class="option">Option 4</label> <input type="radio" name="option" value="wrong" class="option5"> <label class="option">Option 5</label> </form> 

Try using data-attributes on this. 尝试对此使用data-attributes Check my snippet. 检查我的代码段。

 $(document).ready(function() { $("label").click(function() { if ($(this).data('attr') == 'wrong') { $(this).css("background", "red"); } else { $(this).css("background", "green");} }); }); 
 .option { background: #eee; display: block; padding: 5px 10px 5px; color: #000; text-decoration: none; -moz-border-radius: 6px; -webkit-border-radius: 6px; -khtml-border-radius: 6px; border-radius: 6px; box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6); -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.6); text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.25); border-bottom: 1px solid rgba(0, 0, 0, 0.25); position: relative; cursor: pointer; text-decoration: none; margin-bottom: 10px; } input[type="radio"] { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form class="form3"> <input type="radio" name="option" data-attr="wrong" class="option1"> <label class="option" data-attr="wrong">Option 1</label> <label class="option" data-attr="wrong">Option 2</label> <label class="option" data-attr="wrong">Option 3</label> <label class="option" data-attr="right">Option 4</label> <label class="option" data-attr="right">Option 5</label> </form> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM