[英]How to make check box checked if equal data attribute value of list item?
I have a table
with a button
in each row and the last td
has a ul
with a different numbers of li
.我有一个
table
,每行都有一个button
,最后一个td
有一个ul
,其中li
数量不同。 There is also a form
with a different count of checkboxes
.还有一个带有不同数量
checkboxes
的form
。
What I need is a jQuery function that, when i click on this button
in this tr
, checks the data
attribute value in the li
and, if it's equal to the value of the checkbox/s, it will make it checked.我需要的是一个 jQuery 函数,当我点击这个
tr
这个button
时,检查li
的data
属性值,如果它等于复选框/s 的值,它会使其选中。
$(function() { var liVal = $(".optList li").data("val"), chkVal = $("form-check-input").val(); $(".editBtn").on("click", function() { e.preventDefault(); if (liVal == chkVal) { chkVal.attr("checked", "checked"); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" /> <div class="container my-5"> <div class="row"> <div class="col-4"> <h2>Mark your checkboxes</h2> <form id="editForm"> <div class="form-check"> <input class="form-check-input" type="checkbox" value="1" id="defaultCheck1"> <label class="form-check-label" for="defaultCheck1"> checkbox 1 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="2" id="defaultCheck2"> <label class="form-check-label" for="defaultCheck2"> checkbox 2 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="3" id="defaultCheck3"> <label class="form-check-label" for="defaultCheck3"> checkbox 3 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="4" id="defaultCheck4"> <label class="form-check-label" for="defaultCheck4"> checkbox 4 </label> </div> <button type="submit" class="btn btn-primary mt-3">Submit</button> </form> </div> <div class="col-8"> <table class="table table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">Options</th> </tr> </thead> <tbody> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Mark</td> <td>Otto</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> <li class="list-group-item" data-val="2">2 - Dapibus ac facilisis in</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Jacob</td> <td>Thornton</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="3">3 - Morbi leo risus</li> <li class="list-group-item" data-val="4">4 - Porta ac consectetur ac</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="4">4 - Cras justo odio</li> </ul> </td> </tr> </tbody> </table> </div> </div> </div>
You'll need to identify the data-val
values that are in the same table row as the clicked element.您需要标识与单击的元素位于同一表行中的
data-val
值。 Here's one way to accomplish it:这是实现它的一种方法:
Find the row containing the clicked element by using jQuery's closest()
.使用 jQuery 的
closest()
查找包含单击元素的行。
Find the .list-group-item
elements inside that row by using selector context or find()
.使用选择器上下文或
find()
该行内的.list-group-item
元素。
Build an array of the data-val
values by using map()
to return the value of each element's data-val
attribute.通过使用
map()
返回每个元素的data-val
属性的值来构建data-val
值的数组。
Select the checkbox elements directly by passing the array to their val()
.通过将数组传递给它们的
val()
来直接选择复选框元素。
Here's a demonstration:这是一个演示:
$(function() { // define the checkbox elements let $checkboxes = $(".form-check-input"); $(".editBtn").on("click", function(e) { e.preventDefault(); // find the row of the clicked element let $row = $(this).closest("tr"); // build an array of the row's data values let liVals = $(".list-group-item", $row).map(function() { return $(this).data("val"); }).toArray(); // set the value of the checkboxes to the array of data values $checkboxes.val(liVals); }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" /> <div class="container my-5"> <div class="row"> <div class="col-4"> <h2>Mark your checkboxes</h2> <form id="editForm"> <div class="form-check"> <input class="form-check-input" type="checkbox" value="1" id="defaultCheck1"> <label class="form-check-label" for="defaultCheck1"> checkbox 1 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="2" id="defaultCheck2"> <label class="form-check-label" for="defaultCheck2"> checkbox 2 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="3" id="defaultCheck3"> <label class="form-check-label" for="defaultCheck3"> checkbox 3 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="4" id="defaultCheck4"> <label class="form-check-label" for="defaultCheck4"> checkbox 4 </label> </div> <button type="submit" class="btn btn-primary mt-3">Submit</button> </form> </div> <div class="col-8"> <table class="table table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">Options</th> </tr> </thead> <tbody> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Mark</td> <td>Otto</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> <li class="list-group-item" data-val="2">2 - Dapibus ac facilisis in</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Jacob</td> <td>Thornton</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="3">3 - Morbi leo risus</li> <li class="list-group-item" data-val="4">4 - Porta ac consectetur ac</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="4">4 - Cras justo odio</li> </ul> </td> </tr> </tbody> </table> </div> </div> </div>
For further reference, see jQuery's selector context .如需进一步参考,请参阅 jQuery 的选择器上下文。
jQuery( selector [, context ] )
selector
选择器
Type: Selector类型:选择器
A string containing a selector expression包含选择器表达式的字符串
context
语境
Type: Element or jQuery类型:元素或jQuery
A DOM Element, Document, or jQuery to use as context用作上下文的 DOM 元素、文档或 jQuery
So what you wanna do is get to list-group-items
then you want to get all the Checkboxes and then compare each list-group-item with every checkbox and if it matches you wanna set it's property checked
to true所以你想做的事就是去
list-group-items
,那么你想获得的所有复选框,然后比较各列表组项与每一个复选框,如果它匹配你想设置的属性checked
为真
$(document).ready(function() { $(".editBtn").click(function() { var TableRow = $(this) .parent() .parent(); var OptList = TableRow.find(".optList"); var ListGroup = OptList.find(".list-group"); // List Items var ListItems = ListGroup.children(); // Inputs var CheckBoxes = document.getElementsByClassName("form-check-input"); // Check Each List Item with Every Checkbox Value $(ListItems).each(function(index) { var DataVal = $(this).attr("data-val"); $(CheckBoxes).each(function(index) { var checkboxvalue = $(this).val(); if (DataVal === checkboxvalue) { $(this).prop("checked", true); } }); }); }); }); // Event Listener to toggle Check Property $(".form-check-input").change(function() { if ($(this).is(":checked")) { $(this).prop("checked", true); } else { $(this).prop("checked", false); } });
<!DOCTYPE html> <html lang="en"> <head> <!-- jquery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- Bootstrap 4 JS --> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous" ></script> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" /> </head> <body> <div class="container my-5"> <div class="row"> <div class="col-4"> <h2>Mark your checkboxes</h2> <form id="editForm"> <div class="form-check"> <input class="form-check-input" type="checkbox" value="1" id="defaultCheck1" /> <label class="form-check-label" for="defaultCheck1"> checkbox 1 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="2" id="defaultCheck2" /> <label class="form-check-label" for="defaultCheck2"> checkbox 2 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="3" id="defaultCheck3" /> <label class="form-check-label" for="defaultCheck3"> checkbox 3 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="4" id="defaultCheck4" /> <label class="form-check-label" for="defaultCheck4"> checkbox 4 </label> </div> <button type="submit" class="btn btn-primary mt-3">Submit</button> </form> </div> <div class="col-8"> <table class="table table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">Options</th> </tr> </thead> <tbody> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Mark</td> <td>Otto</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1"> 1 - Cras justo odio </li> <li class="list-group-item" data-val="2"> 2 - Dapibus ac facilisis in </li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Jacob</td> <td>Thornton</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="3"> 3 - Morbi leo risus </li> <li class="list-group-item" data-val="4"> 4 - Porta ac consectetur ac </li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1"> 1 - Cras justo odio </li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="4"> 4 - Cras justo odio </li> </ul> </td> </tr> </tbody> </table> </div> </div> </div> </body> </html>
When you click on edit
button then need to find parent (tr)
then use find()
method to get [data-val]
inside (tr)
then use each()
method and inside each method set data-val
value + checkbox
value is equal(matched) then checked(true) something like below snippet.当你点击
edit
按钮然后需要找到父(tr)
然后使用find()
方法在(tr)
获取[data-val]
然后使用each()
方法并在每个方法中设置data-val
值+ checkbox
值是等于(匹配)然后检查(真)类似于下面的代码片段。
$(function() { // define the checkbox elements let allcheckBoxes = $(".form-check-input"); $(".editBtn").on("click", function(e) { e.preventDefault(); // Remove previous checked allcheckBoxes.prop('checked', false); // Find parent as <tr> let $row = $(this).parent().parent(); $row.find('[data-val]').each(function(i,v){ var listValues = $(this).attr('data-val'); // If list value and checkbox value matched then checked -> true $('.form-check-input[value="'+listValues+'"]').prop('checked', true); }); }); });
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> <div class="container my-5"> <div class="row"> <div class="col-4"> <h2>Mark your checkboxes</h2> <form id="editForm"> <div class="form-check"> <input class="form-check-input" type="checkbox" value="1" id="defaultCheck1"> <label class="form-check-label" for="defaultCheck1"> checkbox 1 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="2" id="defaultCheck2"> <label class="form-check-label" for="defaultCheck2"> checkbox 2 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="3" id="defaultCheck3"> <label class="form-check-label" for="defaultCheck3"> checkbox 3 </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="4" id="defaultCheck4"> <label class="form-check-label" for="defaultCheck4"> checkbox 4 </label> </div> <button type="submit" class="btn btn-primary mt-3">Submit</button> </form> </div> <div class="col-8"> <table class="table table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">Options</th> </tr> </thead> <tbody> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Mark</td> <td>Otto</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> <li class="list-group-item" data-val="2">2 - Dapibus ac facilisis in</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Jacob</td> <td>Thornton</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="3">3 - Morbi leo risus</li> <li class="list-group-item" data-val="4">4 - Porta ac consectetur ac</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a></th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="1">1 - Cras justo odio</li> </ul> </td> </tr> <tr> <th scope="row"> <a href="#" class="btn btn-primary editBtn">edit</a> </th> <td>Larry</td> <td>the Bird</td> <td class="optList"> <ul class="list-group"> <li class="list-group-item" data-val="4">4 - Cras justo odio</li> </ul> </td> </tr> </tbody> </table> </div> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.