I cannot detect when and which checkbox gets clicked from script below:
HTML Snippet:
<label for="checkbox[1]"><input type="checkbox" name="checkbox[1]" id="checkbox[1]" class="detectThisChange" value="10.00" checked=""> Amount $10.00</label>
<label for="checkbox[2]"><input type="checkbox" name="checkbox[2]" id="checkbox[2]" class="detectThisChange" value="20.00" checked=""> Amount $20.00</label>
<label for="checkbox[3]"><input type="checkbox" name="checkbox[3]" id="checkbox[3]" class="detectThisChange" value="30.00" checked=""> Amount $30.00</label>
jQuery Snippet:
$(document).ready(function() {
$(window).load(function() {
// ... //
$('.detectThisChange').change(function(event){
var targetID = triggerEvent.target.id; // get the id that triggered the event
var posStart = targetID.indexOf('[') + 1;
var posEnd = targetID.indexOf(']');
var i = targetID.substring(posStart, posEnd); // get the index of the id that triggered the event
if ( $('#checkbox\\['+ i +'\\]').prop('checked') != true ) {
alert('checkbox ' + i + ' was checked');
}
else {
alert('checkbox ' + i + ' was unchecked');
}
});
// ... //
}); // end .load()
}); // end .ready()
Appended:
The problem I am experiencing is that none of my alerts work. So that tells me the change() function is not firing.
If you are adding this HTML dinamically, you should use the .on() method, like:
$(document).on('change', '.detectThisChange', function() {
// your code
});
Give it a try and let me know if it helps.
Try like this
$("input[type=checkbox]").is(":checked") // returns boolean checked or unchecked
var arr = [];
$("input[type=checkbox]").each(function () {
var self = $(this);
if (self.is(':checked')) {
arr.push(self.attr("id"));
}
});
console.log(arr);
EdIted:
$("input[type=checkbox]").on('change', function () {
var self = $(this);
if (self.is(":checked")) {
console.log("checkbox id =" + self.attr("id") + "is checked ");
} else {
console.log("Id = " + self.attr("id") + "is Unchecked ");
}
});
Edited 2 :
$("body").on('change','.detectThisChange', function () {
var self = $(this);
if (self.is(":checked")) {
console.log("checkbox id =" + self.attr("id") + "is checked ");
} else {
console.log("Id = " + self.attr("id") + "is Unchecked ");
}
});
Working Demo
Learn jQuery: Simple and easy jQuery tutorials blog
Try on change
event with this id selector as 'input[id^=checkbox]'
:
$(function() {
$('input[id^=checkbox]').on('change', function() {
console.log(this.value, this.checked);
}).trigger('change');//fire event on page load
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="checkbox[1]">
<input type="checkbox" name="checkbox[1]" id="checkbox[1]" class="detectThisChange" value="10.00" checked="">Amount $10.00</label>
<label for="checkbox[2]">
<input type="checkbox" name="checkbox[2]" id="checkbox[2]" class="detectThisChange" value="20.00" checked="">Amount $20.00</label>
<label for="checkbox[3]">
<input type="checkbox" name="checkbox[3]" id="checkbox[3]" class="detectThisChange" value="30.00" checked="">Amount $30.00</label>
Try this :
$(".detectThisChange").on('change', function () {
alert("In the function");
var targetID = this.id; // get the id that triggered the event
var posStart = targetID.indexOf('[') + 1;
var posEnd = targetID.indexOf(']');
var i = targetID.substring(posStart, posEnd); // get the index of the id that triggered the event
if ($('#checkbox\\[' + i + '\\]').prop('checked') == true) {
alert('checkbox ' + i + ' was checked');
} else {
alert('checkbox ' + i + ' was unchecked');
}
});
Here's the JSFiddle, even though you have an answer :)
Try:)
if ( $('#checkbox\\['+ i +'\\]').is(":checked") ) {
alert('checkbox ' + i + ' was checked');
}
else {
alert('checkbox ' + i + ' was unchecked');
}