我试图从多个按钮组中的选定radio buttons中检索自定义数据属性,并为用户显示它们。

这是我正在使用的radio buttons的示例:

<input type="radio" id="poolSmallButton" name="pool" class="calc" value="500" data-selection-name="Small Pool"/>
<input type="radio" id="poolMediumButton" name="pool" class="calc" value="1000" data-selection-name="Medium Pool"/>

<input type="radio" id="landscapingSmallButton" name="landscaping" value="100" class="calc" data-selection-name="Small Landscaping"/>
<input type="radio" id="landscapingMediumButton" name="landscaping" value="500" class="calc" data-selection-name="Medium Landscaping"/>

<span id="quote-items" name="quote-items"></span>


我当前正在使用此jQuery从选定的radio buttons中提取数据属性,但是当前只有radio button中加载的最顶部的DOM仅显示为我的输出:

var itemNames = [$(".calc:checked").attr("data-selection-name")];
  $("#quote-items").text(itemNames)


谢谢!

最佳答案

每当您使用.attr(key)方法时,它将始终为您获取第一个匹配元素的值。要从所有匹配的元素中获取值,您需要进行迭代,为此有多种方法。 .each()可用于迭代并将值推入数组中。

在这里,我使用.map()来获取选中复选框的属性值数组



$('.calc').change(function() {
  var itemNames = $(".calc:checked").map(function() {
      return $(this).attr("data-selection-name")
    })
    .get() //Get an array
    .join(',') //Generate Comma seperate string;

  $("#quote-items").text(itemNames);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" id="poolSmallButton" name="pool" class="calc" value="500" data-selection-name="Small Pool" />
<input type="radio" id="poolMediumButton" name="pool" class="calc" value="1000" data-selection-name="Medium Pool" />

<input type="radio" id="landscapingSmallButton" name="landscaping" value="100" class="calc" data-selection-name="Small Landscaping" />
<input type="radio" id="landscapingMediumButton" name="landscaping" value="500" class="calc" data-selection-name="Medium Landscaping" />

<span id="quote-items" name="quote-items"></span>





另外,您可以使用Element.dataset属性访问data-*前缀属性,例如

this.dataset.selectionName;


代替

$(this).attr("data-selection-name");

07-24 17:26
查看更多