Reputation: 8116
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.
Upvotes: 5
Views: 23884
Reputation: 10218
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 ");
}
});
Upvotes: 7
Reputation: 6460
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 :)
Upvotes: 2
Reputation: 1446
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.
Upvotes: 19
Reputation:
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>
Upvotes: 2
Reputation: 85653
Try:)
if ( $('#checkbox\\['+ i +'\\]').is(":checked") ) {
alert('checkbox ' + i + ' was checked');
}
else {
alert('checkbox ' + i + ' was unchecked');
}
Upvotes: 0