I have two checkbox and under this when tick one of two checkbox I have two another option checkbox and another tick there will be text. The text will be value from the checkbox, how can I get the value from this checkbox? But the text I want to put are different sentence for each option checkbox selected not the word from checkbox. Did anyone know?
And my another problem is the checkbox not working if I do not tick the first checkbox.
<script type="text/javascript">
function ShowHideDiv(Cat) {
var dvCat = document.getElementById("bigCat");
bigCat.style.display = Cat.checked ? "block" : "none";
}
</script>
<label for="Cat">
<input type="checkbox" id="Cat" onclick="ShowHideDiv(this)" /> Cat
</label>
<script type="text/javascript">
function ShowHideDiv2(Rabbit) {
var bigRabbit = document.getElementById("bigRabbit");
bigRabbit.style.display = Rabbit.checked ? "block" : "none";
}
</script>
<label for="Rabbit">
<input type="checkbox" id="Rabbit" onclick="ShowHideDiv2(this)" /> Rabbit
</label>
<div id="bigCat" style="display: none">
<label>
<input type="checkbox" id="bigSubCat" /> British shorthair
</label>
<label>
<input type="checkbox" id="bigSubCat" /> Exotic Shorthair
</label>
<div id="bigRabbit" style="display: none">
<label>
<input type="checkbox" id="bigSubRabbit" /> White Rabbit
</label>
<label>
<input type="checkbox" id="bigSubRabbit" /> Black Rabbit
</label>
Add value attribute to the checkbox. and set value to the checkbox.Or you can take the text from the label
<script type="text/javascript">
function ShowHideDiv(Cat) {
var dvCat = document.getElementById("bigCat");
bigCat.style.display = Cat.checked ? "block" : "none";
console.log(Cat.value)
console.log("Text Inside LABEL:" + Cat.parentNode.textContent )
}
</script>
<label for="Cat">
<input type="checkbox" id="Cat" onclick="ShowHideDiv(this)" value="cat"/> Cat
</label>
<script type="text/javascript">
function ShowHideDiv2(Rabbit) {
var bigRabbit = document.getElementById("bigRabbit");
bigRabbit.style.display = Rabbit.checked ? "block" : "none";
console.log(Rabbit.value)
console.log("Text Inside LABEL:" + Rabbit.parentNode.textContent )
}
</script>
<label for="Rabbit">
<input type="checkbox" id="Rabbit" onclick="ShowHideDiv2(this)" value="Rabbit"/> Rabbit
</label>
<div id="bigCat" style="display: none">
<label>
<input type="checkbox" id="bigSubCat" /> British shorthair
</label>
<label>
<input type="checkbox" id="bigSubCat" /> Exotic Shorthair
</label>
</div>
<div id="bigRabbit" style="display: none">
<label>
<input type="checkbox" id="bigSubRabbit" /> White Rabbit
</label>
<label>
<input type="checkbox" id="bigSubRabbit" /> Black Rabbit
</label>
I think you can follow this simple logic:
https://jsfiddle.net/pablodarde/6p7zkfwf/
HTML
<div class="container">
<div class="row">
<input type="checkbox" value="This is option one!" id="opt1"><label for="opt1">Option One</label>
<p></p>
</div>
<div class="row">
<input type="checkbox" value="This is option two!" id="opt2"><label for="opt2">Option Two</label>
<p></p>
</div>
</div>
JavaScript
const checkboxes = document.querySelectorAll('.container input[type=checkbox]');
for (let i = 0, l = checkboxes.length; i < l; i++) {
checkboxes[i].addEventListener('click', (e) => {
if(checkboxes[i].parentNode.querySelector('p').innerHTML == "") {
checkboxes[i].parentNode.querySelector('p').innerHTML = checkboxes[i].value;
} else {
checkboxes[i].parentNode.querySelector('p').innerHTML = "";
}
});
}
CSS
.row {
padding-bottom: 10px;
border-bottom: 1px solid black;
}
Related
I would like to remove my input value when disabled.
I found some solution here:
Reset disabled input field's value
but it didn't work in my case.
My code looks like this:
<figure class="question">
<label>
<div class="order">5</div>
<p class="question_title">Live stream<span class="asterisk">*</span></p>
</label>
<br>
<input name="live_stream" class="radiobtn" type="radio" value="Yes">Yes
<input name="live_stream" class="radiobtn" type="radio" value="No">No
<br>
</figure>
<script>
$("input[name=live_stream]").on('click', function() {
var autoRefresh = $('#autorefresh');
if ($(this).val() == "No") {
autoRefresh.show();
autoRefresh.find('input,select,radio').prop('disabled', false);
} else {
autoRefresh.find('input,select,radio').prop('disabled', true);
autoRefresh.find('input,select,radio').val()= null ;
}
});
</script>
<figure class="question" id="autorefresh">
<label>
<div class="order">6</div>
<p class="question_title">Autorefresh frequency (in seconds)<span class="asterisk">*</span></p>
</label>
<input type="number" id="autoref" name="autorefresh" min="10" max="900" message="Give value between 10 and 900 seconds">
</figure>
Is it achievable by JQuery or at least pure HTML?
You are so close. The problem is in your line autoRefresh.find('input,select,radio').val()= null ;. This is not valid jQuery. Instead, try replacing that line with this:
autoRefresh.find('input,select,radio').val('');
This clears the input value. Full working code:
$("input[name=live_stream]").on('click', function() {
var autoRefresh = $('#autorefresh');
if ($(this).val() == "No") {
autoRefresh.show();
autoRefresh.find('input,select,radio').prop('disabled', false);
} else {
autoRefresh.find('input,select,radio').prop('disabled', true);
autoRefresh.find('input,select,radio').val('');
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<figure class="question">
<label>
<div class="order">5</div>
<p class="question_title">Live stream<span class="asterisk">*</span></p>
</label>
<br>
<input name="live_stream" class="radiobtn" type="radio" value="Yes">Yes
<input name="live_stream" class="radiobtn" type="radio" value="No">No
<br>
</figure>
<figure class="question" id="autorefresh">
<label>
<div class="order">6</div>
<p class="question_title">Autorefresh frequency (in seconds)<span class="asterisk">*</span></p>
</label>
<input type="number" id="autoref" name="autorefresh" min="10" max="900" message="Give value between 10 and 900 seconds">
</figure>
How can I toggle a checkbox by using a text input check and check automatically if it exists in the list?
For example :
if you write 222 in the input with id=222 will be checked
if already checked it will be unchecked
if is not found an alert will be shown
$(document).ready(function() {
$('#Scan').on('keypress', function(e) {
if (e.which == 13) {
Scan = $('#Scan').val();
//if value exsit in the list -> checked
//if value checked -> dechecked
//if value not exist -> alert not exist
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="Scan" name="Scan" type="text" autocomplete="off" placeholder="Tracking Number" autofocus>
<br/>
<input class="custom-control-input" type="checkbox" id="111" value="111">
<label for="111" class="custom-control-label">111</label>
<br/>
<input class="custom-control-input" type="checkbox" id="222" value="222">
<label for="222" class="custom-control-label">222</label>
<br/>
<input class="custom-control-input" type="checkbox" id="333" value="333">
<label for="333" class="custom-control-label">333</label>
<br/>
<input class="custom-control-input" type="checkbox" id="444" value="444">
<label for="444" class="custom-control-label">444</label>
<br/>
<input class="custom-control-input" type="checkbox" id="555" value="555">
<label for="555" class="custom-control-label">555</label>
You can check if your result collection has elements in it by using .length.
$(document).ready(function() {
$('#Scan').on('keypress', function(e) {
if (e.which == 13) {
Scan = $('#Scan').val();
target = $(`#${Scan}`);
if (target.length) {
target.prop('checked', !target.prop('checked'));
} else {
alert("Not found");
}
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="Scan" name="Scan" type="text" autocomplete="off" placeholder="Tracking Number" autofocus>
<br/>
<input class="custom-control-input" type="checkbox" id="111" value="111">
<label for="111" class="custom-control-label">111</label>
<br/>
<input class="custom-control-input" type="checkbox" id="222" value="222">
<label for="222" class="custom-control-label">222</label>
<br/>
<input class="custom-control-input" type="checkbox" id="333" value="333">
<label for="333" class="custom-control-label">333</label>
<br/>
<input class="custom-control-input" type="checkbox" id="444" value="444">
<label for="444" class="custom-control-label">444</label>
<br/>
<input class="custom-control-input" type="checkbox" id="555" value="555">
<label for="555" class="custom-control-label">555</label>
Reference for template literals, just in case.
Here is an example using your conditions specified in question.
My alert is not a true js alert as that will halt any further input changes, so i've created an alert function to show if [name="scan"] input value exists in your checkbox input ids.
See comments in my script...
// create input ids array
let input_ids = [];
// for each checkbox type input id
$('[type="checkbox"]').each(function() {
// get the input id
let input_id = $(this).attr('id');
// add input id to input ids array
input_ids.push(input_id);
});
// on input change in doc for elem [name="scan"]
$(document).on('input', '[name="scan"]', function(e) {
// [name="scan"] current input val
let val = e.target.value;
// if val exist in input ids array
if ($.inArray(val, input_ids) >= 0) {
// get this input by id
let $input = $('#' + e.target.value);
// if input is checked
if ($input.prop('checked')) {
// uncheck input
$input.prop('checked', false);
} else {
// else check input
$input.prop('checked', true);
}
} else {
// run alert
alert(e);
}
// stop propagation
e.stopPropagation();
});
// not found alert
function alert(e) {
// activate alert class
$('.alert').addClass('active');
// time out to hide
setTimeout(function() {
// remove class
$('.alert').removeClass('active');
}, 1000);
}
.alert {
position: fixed;
top: 10px;
right: 10px;
background: red;
padding: .25rem .5rem;
opacity: 0;
transition: all .5s ease;
color: #fff;
}
.alert.active {
opacity: 1
}
<input name="scan" type="text" autocomplete="off" placeholder="Tracking Number" autofocus />
<br />
<input class="custom-control-input" type="checkbox" id="111" />
<label for="111" class="custom-control-label">111</label>
<br />
<input class="custom-control-input" type="checkbox" id="222" />
<label for="222" class="custom-control-label">222</label>
<br />
<input class="custom-control-input" type="checkbox" id="333" />
<label for="333" class="custom-control-label">333</label>
<br />
<input class="custom-control-input" type="checkbox" id="444" />
<label for="444" class="custom-control-label">444</label>
<br />
<input class="custom-control-input" type="checkbox" id="555" />
<label for="555" class="custom-control-label">555</label>
<div class="alert">Not found</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
I wouldn't use jQuery, but if you insist:
$(function(){
const scan = $('#Scan'), cci = $('.custom-control-input');
let scanVal;
scan.on('input', ()=>{
let scanVal = scan.val(), good;
cci.each((i, n)=>{
if(scanVal === $(n).val()){
n.checked = !n.checked; good = true;
}
});
if(good === undefined && scanVal.length > 2){
alert('Never use Alert');
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="Scan" name="Scan" type="text" autocomplete="off" placeholder="Tracking Number" autofocus>
<br/>
<input class="custom-control-input" type="checkbox" id="111" value="111">
<label for="111" class="custom-control-label">111</label>
<br/>
<input class="custom-control-input" type="checkbox" id="222" value="222">
<label for="222" class="custom-control-label">222</label>
<br/>
<input class="custom-control-input" type="checkbox" id="333" value="333">
<label for="333" class="custom-control-label">333</label>
<br/>
<input class="custom-control-input" type="checkbox" id="444" value="444">
<label for="444" class="custom-control-label">444</label>
<br/>
<input class="custom-control-input" type="checkbox" id="555" value="555">
<label for="555" class="custom-control-label">555</label>
I would like all text input to be required after selecting the appropriate checkbox.
I try this code:
$('#some_checkbox').change(function () {
if (this.checked) {
$('.some-div input[type="text"]').prop('required', true);
} else {
$('.some-div input[type="text"]').prop('required', false);
}
});
<div class="some-div">
<input type="text" name"foo" placeholder="foo">
<input type="text" name"foo2" placeholder="foo">
</div>
But not working
First of all, the = sign is missing on the name attribute of your text inputs.
Next just for testing and demonstrating I've added a formular with a submit button and your desired checkbox. The function onChangeSomeCheckbox() will change the required property of all inputs with the type text in the class given of the data-required from the checkbox.
$('#some_checkbox').on('change', onChangeSomeCheckbox);
function onChangeSomeCheckbox(event) {
var $checkbox = $(event.target);
$($checkbox.data('required') + ' input[type="text"]').prop('required', $checkbox.prop('checked'));
}
input {
margin-bottom: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="some_checkbox">
require texts
<input type="checkbox" id="some_checkbox" data-required=".some-div" />
</label>
<form>
<div class="some-div">
<input type="text" name="foo" placeholder="foo" />
<input type="text" name="foo2" placeholder="foo" />
</div>
<input type="submit" />
</form>
$('label').click(function() {
id = this.id.split('-');
if (id[0] === '1') {
id[0] = '2';
} else {
id[0] = '1';
}
$('#' + id[0] + '-' + id[1]).prop('checked', true);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="one">
<input type="radio" id="1-1" name="1-level">
<label for="1-1" id="1-1">1</label>
<input type="radio" id="1-2" name="1-level">
<label for="1-2" id="1-2">2</label>
</div>
<div class="two">
<input type="radio" id="2-1" name="2-level">
<label for="2-1" id="2-1">1</label>
<input type="radio" id="2-2" name="2-level">
<label for="2-2" id="2-2">2</label>
</div>
Is it possible to have one label for multiple inputs (radio)? So if I press the label (e. q. for="1"), two input fields get checked (input with id 1 in div class one and two)? Here is my example:
<div class="one">
<input type="radio" id="1" name="level">
<label for="1">1</label>
<input type="radio" id="2" name="level">
<label for="2">2</label>
</div>
<div class="two">
<input type="radio" id="1" name="level">
<label for="1">1</label>
<input type="radio" id="2" name="level">
<label for="2">2</label>
</div>
Quote from ducumentation:
https://www.w3.org/TR/html401/interact/forms.html#h-17.9.1
The LABEL element may be used to attach information to controls. Each
LABEL element is associated with exactly one form control.
So only way to do what you asked is by using JS
HTML:
Use data-input-group-id instead of id and data-for-input-group instead of for. Also you'll now be able to use "1" and "2" not "1-1" etc.
JS:
$('[data-for-input-group]').click(function() {
let inputGroupId = this.dataset.inputGroupId;
$('[data-input-group-id = "'+inputGroupId+'"]').prop('checked', true);
});
<script type="text/javascript">
function ShowHideDiv(chkCat) {
var dvCat = document.getElementById("dvCat");
dvCat.style.display = chkCat.checked ? "block" : "none";
}
</script>
<label for="chkCat">
<input type="checkbox" id="chkCat" onclick="ShowHideDiv(this)" /> Cat
</label>
<div id="dvCat" style="display: none">
<label>
<input type="checkbox" id="dvCat" onclick="ShowHideDiv(this)" /> British shorthair
</label>
<label>
<p id="British shorthair" ></p>
</label>
<script>
document.getElementById("dvCat").addEventListener("click", function(){
document.getElementById("British shorthair").innerHTML = "RM00";
});
</script>
<label>
<input type="checkbox" id="chkCat" onclick="ShowHideDiv(this)" /> Exotic Shorthair
</label>
<p id="Exotic Shorthair"></p>
<script>
document.getElementById("dvCat").addEventListener("click", function(){
document.getElementById("Exotic Shorthair").innerHTML = "RM00";
});
</script>
1 checkbox. Under this another 2 options checkbox. Select one of the two checkbox the output of both these options came out simultaneously. Try to run this coding. Can you fix my coding?
You can fix it for now by assigning unique ID to checkboxes.
<script type="text/javascript">
function ShowHideDiv(chkCat) {
var dvCat = document.getElementById("dvCat");
dvCat.style.display = chkCat.checked ? "block" : "none";
}
</script>
<label for="chkCat">
<input type="checkbox" id="chkCat" onclick="ShowHideDiv(this)" /> Cat
</label>
<div id="dvCat" style="display: none">
<label>
<input type="checkbox" id="dvSubCat" /> British shorthair
</label>
<label>
<p id="British shorthair" ></p>
</label>
<script>
document.getElementById("dvSubCat").addEventListener("click", function(){
document.getElementById("British shorthair").innerHTML = "RM00";
});
</script>
<label>
<input type="checkbox" id="chkSubCat" /> Exotic Shorthair
</label>
<p id="Exotic Shorthair"></p>
<script>
document.getElementById("chkSubCat").addEventListener("click", function(){
document.getElementById("Exotic Shorthair").innerHTML = "RM00";
});
</script>
P.S: Assigning id is not the ultimate solution, if you have more than 1 checkbox falling in same criteria use class names instead