【问题标题】:Fix JS code: Append multiple values out of checkboxes to url修复 JS 代码:将复选框中的多个值附加到 url
【发布时间】:2019-04-21 16:04:06
【问题描述】:

我发现这段代码用选中的复选框值替换了链接文本(=“显示”)。现在,我正在寻找将选中/未选中值附加/删除到链接 url 本身的代码。

function calculate() {
  var arr = $.map($('input:checkbox:checked'), function(e, i) {
    return +e.value;
  });
  $("[href$='feature=']").text('the checked values are: ' + arr.join(','));
}

calculate();
$('div').delegate('input:checkbox', 'click', calculate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
  <input type="checkbox" name="options[]" value="Teamsport" />
  <input type="checkbox" name="options[]" value="Individual sport" />
</div>

<div><a href="/best/?price=123&amp;feature=">Show</a></div>

<a href="/best/?price=123&amp;feature=Teamsport">Show</a>

非常感谢你们的帮助,伙计们!

【问题讨论】:

    标签: javascript jquery html checkbox


    【解决方案1】:

    我会使用.each() 循环而不是$.map()...

    另外,由于您希望更改 href... 并且它与 attribute selector 一起使用,我会在 href 更改之前将元素保存在变量中。 href "base" 值本身也是如此。因为在第二次点击时,href 不会以 feature= 结尾。

    所以这是一个工作演示:

    function calculate() {
      var arr = [];
      $('input:checkbox:checked').each(function(i,v) {
        arr.push(v.value);
      });
      
      // The array in console
      console.log(arr);
      
      // Join it has a string
      var arr_string = arr.join(",");  
    
      // Use the string in the link's text AND the href
      link
        .text('the checked values are: ' + arr_string)
        .attr('href', link_href_base + arr_string);
      
      // The link's href in console
      console.log(link.attr("href"));
    }
    
    // Variables that won't change
    var link = $("[href$='feature=']");
    var link_href_base = link.attr("href");
    
    calculate();
    $('div').delegate('input:checkbox', 'click', calculate);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div>
      <input type="checkbox" name="options[]" value="Teamsport" />
      <input type="checkbox" name="options[]" value="Individual sport" />
    </div>
    
    <div><a href="/best/?price=123&amp;feature=">Show</a></div>

    【讨论】:

    • 为什么 each 而不是 map?这不是地图的完美示例还是只是个人喜好?
    • 我会使用map来过滤一些不满足条件的元素。在您的情况下,您知道所有元素都已检查,因为您使用了 :checked 选择器。 ;)
    • 抱歉,这不是 map 的用途,要过滤数组有 Array​.filter 或在 jQuery jQuery.grep 中,map 应该转换 each 元素到一个新的(映射它们)。 @louys-patrice-bessette
    • 是的...我仔细检查过,你是对的。但是$('input:checkbox:checked')不是一个数组,而是一个jQuery元素的集合……
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多