【问题标题】:Apply function to all items in an array?将函数应用于数组中的所有项目?
【发布时间】:2019-11-19 07:40:29
【问题描述】:

我有一个使用 foreach 循环创建的 id 列表。我正在使用 jquery 脚本根据另一个下拉框的值更改下拉框的值。我正在尝试更改脚本,使其适用于所有项目,而不是单独应用。

我尝试了 for 循环和各种通配符 - 我觉得它应该很容易,但我就是无法让它工作。

<script>
$(function() {
  $("#changeall").change(function() {
    $("#item1").val($(this).val());
    $("#item2").val($(this).val());
    $("#item3").val($(this).val());
  });
});
</script>

这可行,但它只是希望它适用于#item*,这样我就不必全部列出。

非常感谢。

根据请求,随附的下拉菜单:

<?php 
$ii = 1;
foreach ($trails as $trail): ?>
            <h4><?= htmlspecialchars(trail->getAttribute("name")) ?></h4>
              <select name="trailstatusform[]" id="item<?= htmlspecialchars($ii) ?>" class="bww">
                <option selected value="<?= htmlspecialchars($trail->getAttribute("status")) ?>">
                  <?= htmlspecialchars($trail->getAttribute("status")) ?>
                </option>
                <option value="OPEN">OPEN</option>
                <option value="CLOSED">CLOSED</option>
              </select>
<?php 
$ii++;
endforeach; ?>   

<select id="changeall">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

【问题讨论】:

标签: jquery arrays loops wildcard


【解决方案1】:

您可以在id 属性上使用each 和通配符选择器(^=),或者使用class 属性选择:

$('#changeall').change(function () {
    var value = $(this).val();
    $("[id^=item]").each(function() { 
        $(this).val(value);
    });
    // or, class-based (this is the preferred way)
    $("select.bww").each(function() { 
        $(this).val(value);
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<br>Items:<br>
<select name="trailstatusform[]" id="item1" class="bww">
    <option selected value="status">status</option>
    <option value="OPEN">OPEN</option>
    <option value="CLOSED">CLOSED</option>
</select><p>
<select name="trailstatusform[]" id="item2" class="bww">
    <option selected value="status">status</option>
    <option value="OPEN">OPEN</option>
    <option value="CLOSED">CLOSED</option>
</select>
<hr>

<br>Change all:<br> 
<select id="changeall">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

【讨论】:

  • 试过这个,也试过上课,但它什么也没做。
  • 它适用于我,但我必须猜测你的 HTML 是什么样的。您能否将其添加到您的问题中,以便我们确切知道您引用的元素是什么?
  • item1, item2 ... select 元素吗?
  • 是的,这些项目是选择元素。我在问题中添加了引用的元素。
  • 我在我的答案中添加了一个可运行的 sn-p:它工作正常。您能否将问题的 HTML 更改为纯 HTML,就像它在浏览器中的外观一样(所以没有 PHP)?这样一来,jQuery 使用的实际 HTML 就毫无疑问了。
【解决方案2】:

因此,使用它们各自通用的类并设置值。

$("#changeall").on("change", function(){
   $(".bww").val(this.value)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="bww">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

<select class="bww">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

<select class="bww">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

<hr/>

<select id="changeall">
  <option value=" "> </option>
  <option value="OPEN">OPEN</option>
  <option value="CLOSED">CLOSED</option>
</select>

【讨论】:

  • 没有必要在另一个答案中做每个喜欢的事情。 jQuery 为你做这件事......
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 2020-02-18
  • 2014-08-15
  • 1970-01-01
  • 2019-10-16
  • 2023-01-24
  • 2014-10-27
相关资源
最近更新 更多