简体   繁体   English

如果列表项的数据属性值相等,如何选中复选框?

[英]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 .还有一个带有不同数量checkboxesform

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时,检查lidata属性值,如果它等于复选框/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>

View on CodePen在 CodePen 上查看

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:这是实现它的一种方法:

  1. Find the row containing the clicked element by using jQuery's closest() .使用 jQuery 的closest()查找包含单击元素的行。

  2. Find the .list-group-item elements inside that row by using selector context or find() .使用选择器上下文find()该行.list-group-item元素。

  3. 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值的数组。

  4. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM