jquery - 单击复选框标签时获取复选框值并从数组中添加/删除其值

标签 jquery html

我已经有了一个用于向数组添加/删除值的起始代码。从这篇文章中得到 - jquery add / remove item from array

我的问题是我正在使用标签,而我得到的 jquery 代码没有使用标签。我只想获取标签元素内复选框的值或数据产品值并将其添加到数组中。

var priceArray = [];
jQuery(document).ready(function($) {
  $('.container-box input[type=checkbox]').each(function() {
    $(this).change(function() {
      if (this.checked) {
        priceArray.push($(this).val());
        $("#selected-products").html("array=[" + priceArray + "]");
      } else {
        var index = priceArray.indexOf($(this).val());
        if (index > -1) {
          priceArray.splice(index, 1);
        }
        $("#selected-products").html("array=[" + priceArray + "]");
      }
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container-box">
  <ul class="clearfix">
    <li>
      <div class="add-checkmark"></div>
      <input class="prod-checkbox" name="wagyu_beef[]" type="checkbox" value="4 - 6oz Teres Majors" id="wb1">
      <label for="wb1">
                <div class="fusion-modal-text-link" title="Click for item details" data-product="4 - 6oz Teres Majors" data-class="wb1" data-toggle="modal" data-target=".fusion-modal.wb1" href="#"><img src="teresmajors.jpg" alt="" class="alignnone size-thumbnail"></div>
            </label>
      <span>4 - 6oz</span>
      <span title="Teres Majors" class="description">Teres Majors</span>
    </li>
    <li>
      <div class="add-checkmark"></div>
      <input class="prod-checkbox" name="wagyu_beef[]" type="checkbox" value="4 - 6oz Top Sirloin" id="wb2">
      <label for="wb2">
                <div class="fusion-modal-text-link" title="Click for item details" data-product="4 - 6oz Top Sirloin" data-class="wb2" data-toggle="modal" data-target=".fusion-modal.wb2" href="#"><img src="topsirloin.jpg" alt="" class="alignnone size-thumbnail"></div>
            </label>
      <span>4 - 6oz</span>
      <span title="Top Sirloin" class="description">Top Sirloin</span>
    </li>
    <li>
      <div class="add-checkmark"></div>
      <input class="prod-checkbox" name="wagyu_beef[]" type="checkbox" value="2lbs Tenderloin Tails" id="wb3">
      <label for="wb3">
                <div class="fusion-modal-text-link" title="Click for item details" data-product="2lbs Tenderloin Tails" data-class="wb3" data-toggle="modal" data-target=".fusion-modal.wb3" href="#"><img src="delicious-grilled-steak-with-seasons-370w.jpg" alt="" class="alignnone size-thumbnail"></div>
            </label>
      <span>2lbs</span>
      <span title="Tenderloin Tails" class="description">Tenderloin Tails</span>
    </li>

  </ul>

</div>

最佳答案

您的标签有一个嵌套 div,其中产品 key 作为您想要的数据集项目。 当选中该复选框时,我使用 jQuery 获取该复选框的标签。然后我将该标签转换为 jquery 标签对象。该标签将文本和 div 作为子项,我想要该标签的 div 子项。我使用 jquery 获取标签的 div 子级,然后在 div 的数据集中查找名为 Product 的键。我这样做是为了检查和未检查,因此它位于 if 语句之外。如果我选中该复选框,我会将产品添加到数组中。如果我取消选中该复选框,我会将其从数组中删除。

<script type="text/javascript">
    var priceArray = [];
    jQuery(document).ready(function ($) {
        $('.container-box input[type=checkbox]').each(function () {
            $(this).change(function () {
                var lbl = $("label[for='" + $(this).attr("id") + "']"); //get the label with this id
                var lbel = $(lbl[0]); //cast to a jquery object
                var childdiv = lbel.context.childNodes[1]; //the div is the second child of the label
                var prdct = $(childdiv).data('product'); //get the product value from the div dataset

                if (this.checked) { 
                    priceArray.push(prdct);
                    $("#selected-products").html("array=[" + priceArray + "]");
                } else {
                    var index = priceArray.indexOf(prdct);
                    if (index > -1) {
                        priceArray.splice(index, 1);
                    }
                    $("#selected-products").html("array=[" + priceArray + "]");
                }
            });
        });
    });
</script>

关于jquery - 单击复选框标签时获取复选框值并从数组中添加/删除其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782221/

相关文章:

javascript - 进行 while 循环延迟重复,直到其中的 ajax 调用完成

php - 自动完成在 PHP 标签内创建的文本框

html - 在右侧放置许多不同的 div 元素,每个元素的高度和宽度均为 100%(全屏)

html - HTML 中的上标文本 &lt;input type ="submit"/>

javascript - 表单正在验证,但即使在出现错误消息后仍会发送

javascript - 获取表单的值并使用它们在 Javascript 中进行比较

html - CSS从左到右滑动面板

html - 由于不可压缩的内容,谷歌浏览器中的新复合层

javascript - AngularJS 选择项目未重置为第一个/默认值

html - 左右容器不在同一高度