Trying to:
What him I missing, any guidance would be appreciated. After I've figured this out... will go and create another array to store the automationName.
<!DOCTYPE html>
<html>
<head>
<title>jQuery Crash Course | Selectors</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<style>
</style>
</head>
<body>
<header>
<h1>jQuery Crash Course</h1>
</header>
<div id="container">
<form id="form">
<table id="flowtable">
<tbody>
<tr class="selected">
<td id="1"></td>
<td class="automationName"> automation 1</td>
<td><input type="checkbox" class="scheduleMe" name="vehicle1"></td>
</tr>
<tr>
<td id="21"></td>
<td class="automationName">automation 21</td>
<td><input type="checkbox" class="scheduleMe" name="vehicle21"></td>
</tr>
<tr>
<td id="111"></td>
<td class="automationName">automation 111</td>
<td><input type="checkbox" class="scheduleMe" name="vehicle111"></td>
</tr>
</tbody>
</table>
<button type="button" class="btn1">check list box</button>
</form>
</div>
<script>
var SelectedItems = [];
$('.btn1').on('click', function () {
SelectedItems.length = 0;
$('#flowtable tbody tr').each(function () {
// if ($(this).is(':checked')) {
// if ($('.scheduleMe').is(':checked')) {
if ($('td .scheduleMe').is(':checked')) {
SelectedItems.push($(this).attr("id"));
}
});
console.log('Checked #' + SelectedItems.length);
console.log("list 2= " + SelectedItems);
});
</script>
</body>
</html>
Firstly, give the checkboxes a value which is the id
they relate to, not the the sibling/parent td
.
From there you can simplify your logic by using map()
to build an array of the selected values only once, when the button is clicked, not having to maintain additions/deletions from the higher scoped array when a change is made.
Below is a working example. Note the use of label
elements to make the clickable area of the checkboxes bigger.
$('.btn1').on('click', function() { let selectedItems = $('.scheduleMe:checked').map((i, el) => el.value).get(); console.log(selectedItems); // work with the array as required here, eg. pass to a fnuction for processing... });
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script> <header> <h1>jQuery Crash Course</h1> </header> <div id="container"> <form id="form"> <table id="flowtable"> <tbody> <tr class="selected"> <td id="1"></td> <td class="automationName"><label for="vehicle1">automation 1</label></td> <td><input type="checkbox" value="1" class="scheduleMe" name="vehicle1" id="vehicle1" /></td> </tr> <tr> <td id="21"></td> <td class="automationName"><label for="vehicle21">automation 21</label></td> <td><input type="checkbox" value="21" class="scheduleMe" name="vehicle21" id="vehicle21" /></td> </tr> <tr> <td id="111"></td> <td class="automationName"><label for="vehicle111">automation 111</label></td> <td><input type="checkbox" value="111" class="scheduleMe" name="vehicle111" id="vehicle111" /></td> </tr> </tbody> </table> <button type="button" class="btn1">check list box</button> </form> </div>
If, for whatever reason, you can't change the HTML, then you can read the value from the td
in map()
like this:
let selectedItems = $('.scheduleMe:checked').map((i, el) => $(el).closest('tr').find('td[id]').prop('id')).get();
callMe()
is a function that is handling all logic. checked
.includes()
. method. var SelectedItems = []; const tableRows = document.querySelectorAll("#flowtable tr"); const checkBoxes = document.querySelectorAll("#flowtable tr td > input"); const btn = document.querySelectorAll("#btn1"); function callMe() { checkBoxes.forEach(checkBox => { if (checkBox.checked) { const currentParent = checkBox.parentElement.parentElement; const getId = currentParent.querySelectorAll("td[id]")[0]; const val = getId.id; if (SelectedItems.includes(val)) return; SelectedItems.push(val); } }) if (SelectedItems === undefined || SelectedItems.length == 0) { // array does not exist or is empty console.log("No checkbox is checked."); } else { console.log(SelectedItems); } }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <header> <h1>jQuery Crash Course</h1> </header> <div id="container"> <form id="form"> <table id="flowtable"> <tbody> <tr class="selected"> <td id="1"></td> <td class="automationName"> automation 1</td> <td><input type="checkbox" class="scheduleMe" name="vehicle1"></td> </tr> <tr> <td id="21"></td> <td class="automationName">automation 21</td> <td><input type="checkbox" class="scheduleMe" name="vehicle21"></td> </tr> <tr> <td id="111"></td> <td class="automationName">automation 111</td> <td><input type="checkbox" class="scheduleMe" name="vehicle111"></td> </tr> </tbody> </table> <button type="button" id="btn1" onclick="callMe();">check list box</button> </form> </div>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.