javascript - 过滤选择框时选择第一个值

标签 javascript jquery

我对下面的脚本有一个问题,如果“产品颜色”多次更改(选择),则水果下拉列表中的第一个预选/过滤项目实际上是上一个数组列表中的最后一个项目,并且它应该是该列表中的第一个。

  • 因此,如果我选择绿色,它将过滤为:“全部”、“水果 1”、“水果 3”、 《水果5》
  • 但是当我切换到黄色时,“水果”下拉列表中的预选值将是上一个列表中的最后一个值,因此“水果 5”

如何强制它始终为第一个值?

示例如下:

$(function() {
  var $product = $('[name="filter-product"]');
  var $fruits = $('[name="filter-fruits"]');

  var $fruitsList = $fruits.find('option').clone();

  var fruit = {
    "Green": ["All", "Fruit 1", "Fruit 3", "Fruit 5"],
    "Yellow": ["All", "Fruit 1", "Fruit 3", "Fruit 4", "Fruit 5"]
  }

  $product.change(function() {
    var $selectedProduct = $(this).find('option:selected').text();
    $fruits.html($fruitsList.filter(function() {
      return $.inArray($(this).text(), fruit[$selectedProduct]) >= 0;
    }));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4>Color</h4>
<select name="filter-product">
  <option value="All">All</option>
  <option value="yellow">Yellow</option>
  <option value="green">Green</option>
</select>
<h4>Fruit</h4>
<select name="filter-fruits">
  <option value="All">All</option>
  <option value="fruit1">Fruit 1</option>
  <option value="fruit2">Fruit 2</option>
  <option value="fruit3">Fruit 3</option>
  <option value="fruit4">Fruit 4</option>
  <option value="fruit5">Fruit 5</option>
</select>

最佳答案

为此,您可以在更新 option 元素后手动将选择的 selectedIndex 设置回 0,如下所示:

$(function() {
  var $product = $('[name="filter-product"]');
  var $fruits = $('[name="filter-fruits"]');

  var $fruitsList = $fruits.find('option').clone();

  var fruit = {
    "Green": ["All", "Fruit 1", "Fruit 3", "Fruit 5"],
    "Yellow": ["All", "Fruit 1", "Fruit 3", "Fruit 4", "Fruit 5"]
  }

  $product.change(function() {
    var $selectedProduct = $(this).find('option:selected').text();
    $fruits.html($fruitsList.filter(function() {
      return $.inArray($(this).text(), fruit[$selectedProduct]) >= 0;
    }));
    $fruits[0].selectedIndex = 0; // select the first option
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4>Color</h4>
<select name="filter-product">
  <option value="All">All</option>
  <option value="yellow">Yellow</option>
  <option value="green">Green</option>
</select>
<h4>Fruit</h4>
<select name="filter-fruits">
  <option value="All">All</option>
  <option value="fruit1">Fruit 1</option>
  <option value="fruit2">Fruit 2</option>
  <option value="fruit3">Fruit 3</option>
  <option value="fruit4">Fruit 4</option>
  <option value="fruit5">Fruit 5</option>
</select>

关于javascript - 过滤选择框时选择第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610312/

相关文章:

javascript - require.js + backbone.js : How to structure modules that have an initialize function?

javascript - 为什么在单击之前不加载旋钮的背景颜色? [Angular.js]

javascript - jquery 中未捕获的语法错误 : Unexpected token .

javascript - Javascript 中类似 Python 的 "Classes"

javascript - 如何使用 angularjs 在 Kendo 网格过滤器文本框中应用电话号码掩码?

javascript - 字符串相乘 - [Leetcode] 与 JavaScript

javascript - Json 格式的对象到带有新键的简单数组

jquery - 灯箱图片大小限制

php - 使用 Javascript 解析 JSON。来自 Laravel 的 JSON

javascript - 如何从 JavaScript 上的 Rails 访问环境变量?