【问题标题】:How to make check box checked if equal data attribute value of list item?如果列表项的数据属性值相等,如何检查复选框?
【发布时间】:2020-03-14 07:19:30
【问题描述】:

我有一个 table,每行都有一个 button,最后一个 td 有一个 @ 987654326@ 与不同的号码 li 。还有一个 formcheckboxes 的计数不同。

我需要的是一个 jQuery 函数,当我点击这个 tr 中的这个 button 时,会检查 data 属性值li 中,如果它等于 checkbox/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

【问题讨论】:

  • 您可能想尝试一下,然后向我们展示您尝试了什么以及具体出了什么问题。这可以帮助我们直观地了解您正在尝试做的事情,而且看到一些努力总是很高兴。
  • @showdev 我真的对它做了很多不同的技术,我从 3 天前开始研究它,但我没有得到任何结果现在我用最后一种方法更新了 codepin 中的 jquery 代码有所以请看一下
  • 我已将您更新的代码添加到您的问题中。见why/how to make a stack snippet

标签: javascript jquery html checkbox bootstrap-4


【解决方案1】:

所以你想要做的是到达list-group-items,然后你想要获取所有复选框,然后将每个列表组项与每个复选框进行比较,如果匹配,你想将它的属性 checked 设置为 true

     $(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>

【讨论】:

    【解决方案2】:

    您需要将位于同一表格行中的data-val 值标识为单击的元素。这是实现它的一种方法:

    1. 使用 jQuery 的 closest() 查找包含单击元素的行。

    2. 使用selector contextfind() 查找该行内部.list-group-item 元素。

    3. 使用map() 构建一个包含data-val 值的数组,以返回每个元素的data-val 属性的值。

    4. 通过将数组传递给它们的val(),直接选择复选框元素。

    这是一个演示:

    $(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>

    如需进一步参考,请参阅 jQuery 的selector context

    jQuery( selector [, context ] )

    选择器
    类型:选择器
    包含选择器表达式的字符串

    上下文
    类型:元素或 jQuery
    用作上下文的 DOM 元素、文档或 jQuery

    【讨论】:

      【解决方案3】:

      当你点击edit按钮然后需要找到父(tr)然后使用find()方法在(tr)里面得到[data-val]然后使用each()方法并且在每个方法里面设置data-val值+ checkbox 值相等(匹配)然后检查(真)类似于下面的 sn-p。

      $(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>

      【讨论】:

        猜你喜欢
        • 2015-03-07
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        相关资源
        最近更新 更多