
A checkbox is a square box, which you can tick or check based on your requirement. If you have multiple checkboxes on your webpage, you will need to add a label element (next to each square box) to identify the checkboxes.
You can easily add a checkbox with a label at design time. However, adding a checkbox dynamically at runtime, is a slightly tricky process.
Here’s how you should do this.
<html>
<head>
<style>
<!--style HTML table-->
table {
width: 100%;
}
table, th, td, th {
border: solid 1px #DDD;
border-collapse: collapse;
padding: 2px 3px;
text-align: center;
font-weight: normal;
}
</style>
</head>
<body>
<!--the element to which we'll add the dynamically created table.-->
<div id="container" style="width:500px;overflow:auto;"></div>
</body>
<script>
var myApp = new function () {
// An array of JSON objects with values.
this.arrPack = [{ 'Sr.No.': '', 'Applicant Name': '', 'Senior Citizen?': ''}]
this.col = [];
this.createTable = function () {
for (var i = 0; i < this.arrPack.length; i++) {
for (var key in this.arrPack[i]) {
if (this.col.indexOf(key) === -1) {
this.col.push(key);
}
}
}
// Create a table
var table = document.createElement('table');
table.setAttribute('id', 'mTable');
var tr = table.insertRow(-1);
for (var h = 0; h < this.col.length; h++) {
// Add table header.
var th = document.createElement('th');
th.innerHTML = this.col[h].replace('_', ' ');
tr.appendChild(th);
tr.setAttribute('style', 'background-color:#777;color:#fff;');
}
// Add new rows to the table using JSON data.
for (var i = 1; i < this.arrPack.length; i++) {
tr = table.insertRow(-1);
for (var j = 0; j < this.col.length; j++) {
var tabCell = tr.insertCell(-1);
tabCell.innerHTML = this.arrPack[i][this.col[j]];
}
}
tr = table.insertRow(-1); // Create the last row.
// Create and add checkbox and textbox controls to table cells.
for (var j = 0; j < this.col.length; j++) {
var newCell = tr.insertCell(-1);
if (j >= 1) {
if (j == 1) {
var tBox = document.createElement('input');
tBox.setAttribute('type', 'text');
tBox.setAttribute('value', '');
newCell.appendChild(tBox);
}
else if (j == 2) {
// Here I am creating and adding checkbox to the table cell.
var chk = document.createElement('input');
var lbl = document.createElement('label');
chk.setAttribute('type', 'checkbox');
chk.setAttribute('value', 'yes');
chk.setAttribute('id', 'chkIfSenior' + i);
lbl.setAttribute('for', 'chkIfSenior' + i);
lbl.appendChild(document.createTextNode('Yes'));
newCell.appendChild(chk);
newCell.appendChild(lbl);
}
}
}
this.td = document.createElement('td');
tr.appendChild(this.td);
var btNew = document.createElement('input');
btNew.setAttribute('type', 'button');
btNew.setAttribute('value', 'Create');
btNew.setAttribute('id', 'New' + i);
btNew.setAttribute('onclick', 'myApp.CreateNew(this)');
this.td.appendChild(btNew);
var div = document.getElementById('container');
div.innerHTML = '';
div.appendChild(table); // Add the newlly created table to the page.
};
// FUNCTION TO CREATE A NEW TABLE ROW.
this.CreateNew = function (oButton) {
var activeRow = oButton.parentNode.parentNode.rowIndex;
var tab = document.getElementById('mTable').rows[activeRow];
var obj = {};
obj[this.col[0]] = '';
// Add new values to arrPack array.
for (i = 1; i < this.col.length; i++) {
var td = tab.getElementsByTagName("td")[i];
if (td.childNodes[0].getAttribute('type') == 'text' ||
td.childNodes[0].getAttribute('type') == 'checkbox') {
var txtVal;
if (td.childNodes[0].getAttribute('type') == 'checkbox') {
// GET THE VALUE OF THE CHECKBOX.
if (td.childNodes[0].checked) txtVal = 'Yes';
else txtVal = 'No';
}
else {
if (td.childNodes[0].value !== '') {
txtVal = td.childNodes[0].value;
}
else {
txtVal = ' ';
}
}
if (txtVal != '') {
obj[this.col[i]] = txtVal.trim();
}
}
}
obj[this.col[0]] = this.arrPack.length; // The new ID for Sr.No.
if (Object.keys(obj).length > 0) {
this.arrPack.push(obj); // Add data to the JSON array.
this.createTable(); // Refresh the table.
}
}
}
myApp.createTable();
</script>
</html>Do not get overwhelmed by the size of the above code. I am creating the table and other elements dynamically and add the table to a div element inside the <body> section.
Let me explain.
I have an array with three columns for the table header. Next, I am creating the table. The code where I am creating and adding the checkbox is this …
else if (j == 2) {
var chk = document.createElement('input');
var lbl = document.createElement('label');
chk.setAttribute('type', 'checkbox');
chk.setAttribute('value', 'yes');
chk.setAttribute('id', 'chkIfSenior' + i);
lbl.setAttribute('for', 'chkIfSenior' + i);
lbl.appendChild(document.createTextNode('Yes'));
newCell.appendChild(chk);
newCell.appendChild(lbl);
}I am creating two elements in the above code. First, an input element of type checkbox and second a label element for the checkbox name. Both the elements are appended or added to the table cell.
The entire process is repeated when I click the Create button to add a new row to the table.
If you want to learn more about to how to add a dropdown list or a button control to a table, then you must check this post.
