Reputation: 97
In a form there are 2 groups of radio buttons.
In the first group named Result, there are 4 option: id="ok", id="fa", id="fp", id="bp".
In the second group named ResultCategories, there are 9 option: id="cat1" .... id="cat9".
What I want:
a. If ok is clicked, ResultCategories will be unchecked (if already checked).
b. If fp or bp is clicked, cat9 of ResultCategories will be checked.
c. If one of the cat1 to cat8 of ResultCategories is clicked, fa of Result will be checked.
Here is the html:
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<div class="container">
<form action="" method="POST">
<fieldset class="scheduler-border">
<legend class="scheduler-border">Quality Check</legend>
<div style="float: right;"><button type="submit" id="submit" name="submit" class="btn btn-info">Complete</button></div>
<br /> <br /> <br />
<div class="row">
<div class="column">
<div id="Result">
<label>Result:</label>
<label class="radioContainer">Ok <input type="radio" name="Result" id ="ok" value="1" />
<span class="circle"></span>
</label>
<label class="radioContainer">Fasle Alarm <input type="radio" name="Result" id="fa" value="2" />
<span class="circle"></span>
</label>
<label class="radioContainer">False Pass <input type="radio" name="Result" id="fp" value="3" />
<span class="circle"></span>
</label>
<label class="radioContainer">Blatant Pass <input type="radio" name="Result" id="bp" value="4" />
<span class="circle"></span>
</label>
</div>
</div>
<br />
<div class="column">
<div id="ResultCategories"><label>Result Categories:</label>
<div>
<label class="radioContainer">Cat 1 <input type="radio" name="ResultCategories" id="cat1" value="1" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 2 <input type="radio" name="ResultCategories" id="cat2" value="2" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 3 <input type="radio" name="ResultCategories" id="cat3" value="3" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 4 <input type="radio" name="ResultCategories" id="cat4" value="4" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 5 <input type="radio" name="ResultCategories" id="cat5" value="5" />
<span class="circle"></span>
</label> <label class="radioContainer">Cat 6 <input type="radio" name="ResultCategories" id="cat6" value="6" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 7 <input type="radio" name="ResultCategories" id="cat7" value="7" />
<span class="circle"></span>
</label> <label class="radioContainer">Cat 8 <input type="radio" name="ResultCategories" id="cat8" value="8" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 9 <input type="radio" name="ResultCategories" id="cat9" value="9" />
<span class="circle"></span>
</label>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
</body>
I know that this can be done by jQuery but I do not have much idea about jQuery. I have researched and tried different things. Here is what I tried last:
$(document).ready(function() {
$('#ok').on('change', function() {
alert($('input[name=Result]:checked', '#ok').val());
if ($('input[name=Result]:checked', '#ok').val() == '1') {
$('#ResultCategories').prop('checked', false);
} else {
}
});
});
It gives an alert once ok is checked but it does not uncheck ResultCategories if already checked.
I have added a jQuery fiddle here: jQuery fiddle
I hope wise guys out there can help me solve the problem. Thanks in advance.
Upvotes: 1
Views: 349
Reputation: 14462
Here is a solution using plain JavaScript.
const ok = document.querySelector('#ok');
const categoriesWrapper = document.querySelector('#ResultCategories');
const fp = document.querySelector('#fp');
const bp = document.querySelector('#bp');
const fa = document.querySelector('#fa');
If something in cats
has been checked and ok
is clicked, uncheck the cat
ok.addEventListener('click', (event) => {
const checked = categoriesWrapper.querySelector('input:checked');
if (checked) {
categoriesWrapper.querySelector('input:checked').checked = false;
}
});
If fp
has been checked, check cat9
as well.
fp.addEventListener('click', (event) => {
categoriesWrapper.querySelector('#cat9').checked = true;
});
If bp
has been checked, check cat9
as well.
bp.addEventListener('click', (event) => {
categoriesWrapper.querySelector('#cat9').checked = true;
});
If cat1-cat8
has been checked, check fa
as well.
categoriesWrapper.addEventListener('click', (event) => {
if (event.target.id !== 'cat9') {
fa.checked = true;
}
});
Here is the complete solution.
const ok = document.querySelector('#ok');
const categoriesWrapper = document.querySelector('#ResultCategories');
const fp = document.querySelector('#fp');
const bp = document.querySelector('#bp');
const fa = document.querySelector('#fa');
ok.addEventListener('click', (event) => {
const checked = categoriesWrapper.querySelector('input:checked');
if (checked) {
categoriesWrapper.querySelector('input:checked').checked = false;
}
});
fp.addEventListener('click', (event) => {
categoriesWrapper.querySelector('#cat9').checked = true;
});
bp.addEventListener('click', (event) => {
categoriesWrapper.querySelector('#cat9').checked = true;
});
categoriesWrapper.addEventListener('click', (event) => {
if (event.target.id !== 'cat9') {
fa.checked = true;
}
});
<div class="container">
<form action="" method="POST">
<fieldset class="scheduler-border">
<legend class="scheduler-border">Quality Check</legend>
<div style="float: right;"><button type="submit" id="submit" name="submit" class="btn btn-info">Complete</button></div>
<br /> <br /> <br />
<div class="row">
<div class="column">
<div id="Result">
<label>Result:</label>
<label class="radioContainer">Ok <input type="radio" name="Result" id ="ok" value="1" />
<span class="circle"></span>
</label>
<label class="radioContainer">Fasle Alarm <input type="radio" name="Result" id="fa" value="2" />
<span class="circle"></span>
</label>
<label class="radioContainer">False Pass <input type="radio" name="Result" id="fp" value="3" />
<span class="circle"></span>
</label>
<label class="radioContainer">Blatant Pass <input type="radio" name="Result" id="bp" value="4" />
<span class="circle"></span>
</label>
</div>
</div>
<br />
<div class="column">
<div id="ResultCategories"><label>Result Categories:</label>
<div>
<label class="radioContainer">Cat 1 <input type="radio" name="ResultCategories" id="cat1" value="1" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 2 <input type="radio" name="ResultCategories" id="cat2" value="2" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 3 <input type="radio" name="ResultCategories" id="cat3" value="3" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 4 <input type="radio" name="ResultCategories" id="cat4" value="4" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 5 <input type="radio" name="ResultCategories" id="cat5" value="5" />
<span class="circle"></span>
</label> <label class="radioContainer">Cat 6 <input type="radio" name="ResultCategories" id="cat6" value="6" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 7 <input type="radio" name="ResultCategories" id="cat7" value="7" />
<span class="circle"></span>
</label> <label class="radioContainer">Cat 8 <input type="radio" name="ResultCategories" id="cat8" value="8" />
<span class="circle"></span>
</label>
<label class="radioContainer">Cat 9 <input type="radio" name="ResultCategories" id="cat9" value="9" />
<span class="circle"></span>
</label>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
Upvotes: 1
Reputation: 1497
$(document).ready(function() {
$('input[name="Result"]').on('change', function() {
var checked_val = $('input[name="Result"]:checked').val();
if (checked_val == 1) {
//If ok is clicked, ResultCategories will be unchecked (if already checked)
$('input[name="ResultCategories"]').prop('checked', false);
} else if (checked_val == 3 || checked_val == 4) {
// If fp or bp is clicked, cat9 of ResultCategories will be checked.
$('#cat9').prop('checked', true);
}
});
$('input[name="ResultCategories"]').on('change', function() {
var checked_val = $('input[name="ResultCategories"]:checked').val();
if (checked_val >= 1 && checked_val <= 8) {
//If one of the cat1 to cat8 of ResultCategories is clicked, fa of Result will be checked.
$('#fa').prop('checked', true);
}
});
});
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
</script>
</head>
<body>
<div class="container">
<form action="" method="POST">
<fieldset class="scheduler-border">
<legend class="scheduler-border">Quality Check</legend>
<div style="float: right;"><button type="submit" id="submit" name="submit" class="btn btn-info">Complete</button></div>
<br /> <br /> <br />
<div class="row">
<div class="column">
<div id="Result">
<label>Result:</label>
<label class="radioContainer">Ok
<input type="radio" name="Result" id ="ok" value="1" /> <span class="circle"></span> </label>
<label class="radioContainer">Fasle Alarm <input type="radio" name="Result" id="fa" value="2" /> <span class="circle"></span> </label> <label class="radioContainer">False Pass <input type="radio" name="Result" id="fp" value="3" /> <span class="circle"></span> </label> <label class="radioContainer">Blatant Pass <input type="radio" name="Result" id="bp" value="4" /> <span class="circle"></span> </label></div>
</div>
<br />
<div class="column">
<div id="ResultCategories"><label>Result Categories:</label>
<div><label class="radioContainer">Cat 1 <input type="radio" name="ResultCategories" id="cat1" value="1" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 2 <input type="radio" name="ResultCategories" id="cat2" value="2" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 3 <input type="radio" name="ResultCategories" id="cat3" value="3" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 4 <input type="radio" name="ResultCategories" id="cat4" value="4" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 5 <input type="radio" name="ResultCategories" id="cat5" value="5" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 6 <input type="radio" name="ResultCategories" id="cat6" value="6" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 7 <input type="radio" name="ResultCategories" id="cat7" value="7" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 8 <input type="radio" name="ResultCategories" id="cat8" value="8" /> <span class="circle"></span> </label> <label class="radioContainer">Cat 9 <input type="radio" name="ResultCategories" id="cat9" value="9" /> <span class="circle"></span> </label></div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
</body>
$(document).ready(function() {
var result_dom = $('input[name="Result"]');
var categories_dom = $('input[name="ResultCategories"]');
var cat9 = $('#cat9');
var fa = $('#fa')
result_dom.on('change', function() {
var checked_val = $(this).val();
if (checked_val == 1) {
categories_dom.prop('checked', false);
} else if (checked_val == 3 || checked_val == 4) {
cat9.prop('checked', true);
}
});
categories_dom.on('change', function() {
var checked_val = $(this).val();
if (checked_val >= 1 && checked_val <= 8) {
fa.prop('checked', true);
}
});
});
Upvotes: 2