javascript - JQuery使用输入文本预选下拉框

标签 javascript jquery html

仅对 JQuery 和 Javascript 有基本了解,这简直要了我的命。本质上,我希望在输入框中输入某些文本时自动选择下拉列表。 例如。 “Foo”是“Category4”项,因此如果有人在输入框中键入 Foo,选择框应自动选择选项 19。 “Bar”是“Category7”项,因此选择框应选择选项 8,即有人在输入框中键入 Bar。

之所以没有硬编码,是因为用户仍然可以选择对这些项目进行重新分类(如果他们认为合适)。 IE。通常“Bar”是“Category7”项,因此脚本应该自动选择选项8,但用户可以通过在下拉框中手动选择“Bar”将其更改为“Category1”项,并且脚本不应该覆盖手动选择。

我已经搜索了下面的脚本,可以让我在输入框中输入类别的名称,并将其填充到下拉列表中,但我无法进入下一步输入,将其与预定义响应列表进行比较,并使用它来填充下拉列表。

<p id="demo"></p>
<input type="text" id="input" placeholder="input">
<select id="category">
  <option value="categoryplaceholder">Category</option>
  <option value="5">Category1</option>
  <option value="22">Category2</option>
  <option value="3">Category3</option>
  <option value="19">Category4</option>
  <option value="23">Category5</option>
  <option value="25">Category6</option>
  <option value="8">Category7</option>
</select>
<input type="submit" value="submit">

$(document).ready(function() {
  $("#input").change(function() {
    var val = $("#input").val();
    $("#category > option").each(function() { //Run through the loop of each option
      if (this.text.indexOf(val) >= 0) { //Find if the string present as substring
        $("#category > option").removeAttr("selected"); //Remove the existing selected option
        $(this).attr("selected", "selected"); //Select this matching option as selected
        return false; //Return after first match is found
      }
    });
  });
});

非常感谢您的帮助! https://jsfiddle.net/chuckler/w52kfpcy/

最佳答案

您可以使用一个对象来保存您的单词及其类别

$(document).ready(function() {
  var Obj = [
    {
      word : 'FOO',
      category : '19'
    },
    {
      word : 'Bar',
      category : '8'
    },
  ];
  $("#input").on('change' , function() {
    var val = $("#input").val();
    $.each(Obj , function(i , v){
      if(v.word.toLowerCase().trim() == val.toLowerCase().trim()){
        $('#category').val(v.category);
        return false;
      }
    })
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="demo"></p>
<input type="text" id="input" placeholder="input">
<select id="category">
  <option value="categoryplaceholder">Category</option>
  <option value="5">Category1</option>
  <option value="22">Category2</option>
  <option value="3">Category3</option>
  <option value="19">Category4</option>
  <option value="23">Category5</option>
  <option value="25">Category6</option>
  <option value="8">Category7</option>
</select>
<input type="submit" value="submit">

考虑:

  • 输入 .change 事件将在焦点移出诸如 blur 之类的内容后触发
  • 使用 .text() 使用选项文本而不是其值
  • 使用.trim()删除左/右的任何空格
  • 使用 .toLowerCase() 区分字母大小写
  • 如果您需要实时更改,可以使用 .on('input' , function(){....}) 而不是 .change()

关于javascript - JQuery使用输入文本预选下拉框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58896284/

相关文章:

jquery - NI 编号验证 Jquery

javascript - 当用户开始输入文本时,在单独的 div 中触发 jQuery 自定义事件

javascript - "Uncaught TypeError: Cannot read property ' 添加事件监听器 ' of null"

javascript - FileUpload HasFile 返回 false

javascript - 禁用 webpack 注入(inject) CSS/Autoprefixer 不起作用

javascript - 如何使用angular js滚动div的底部

javascript - 如何使用javascript将图像url转换为dataurl(base64数据)

html - 如何从psd文件计算行高? (前导+字体大小)

html - 如何让标题中的背景图像保持固定,并且标题小于全屏?

javascript - AngularJS 分离 Controller ,参数不是函数,它是未定义的