实现搜索框既可以下拉框选择也可以输入搜索,输入的时候有自动填充提示

需求描述

项目中有很多列表页面,都有搜索功能,新增需求:所有的搜索框既可以输入搜索,也可以下拉框选择,且输入框输入的时候有相应的提示填充,如图所示:
1147630-20180201145719609-1555894656.png

代码实现

首先实现输入功能,查了很多资料,最终决定在搜索框覆盖一个Input框


<div class="select-editable">
      <select id="qwindyear_id" class="read" onchange="change('qwindyear_id')">
                  <option value="0">年</option>
       </select>
        <input type="text" name="" value="" placeholder="选择年份" id='year_sel' autocomplete="off" onchange="inputChange('qwindyear_id','year_sel')">
 </div>

1147630-20180201152832015-1381080892.png
布局有了,接下来就是实现功能,输入的时候自动填充,因为项目中有做过类似功能,引入的插件是bootstrap中的typeahead.js

插件使用方法

只用了基本的方法实现功能,代码如下:

var years = [];
var years = [];
for(var i = year; i >= 2010; i--){
     years.push(i+'年');
}
$('#year_sel').typeahead({
     source: years
})

这样就实现了边输入边提示的效果。

可以输入,可以搜索,但是点击搜索,后台请求数据的时候需要传参的是id项,也就是传的不是2017年,而是2017。
如图:
1147630-20180201160044218-1436580066.png
提交数据的时候只需要传选中的val()就好了。
下拉框可以实现搜索,输入的话要传参的话有两种方法:
1、在输入时选择某一项,将它的id放在界面上(可以用隐藏域),那么绑定数据源的时候就要绑定对象数组,而不是单纯的数组了
2、在输入时选择某一项,遍历一遍下拉框中的选项,某一项等于option的text时,将下拉框的这一项选中
我用的是第二种方法

难点实现

封装了一个方法,只要input框内的内容改变了,就执行以下代码,下拉框赋值


function inputChange(selname,inputname){
    if($('#'+inputname).val()){
        var option = $('#'+selname+' option');
        for(var i=0;i<option.length;i++){
            if($('#'+inputname).val() == $(option[i]).text()){
                $('#'+selname).val($(option[i]).val());
            }
        }
    }
}

同时用下拉框选中的时候也要将选中的内容赋值给input框,因为Input框不赋值的话是空的,就算后面selected有选中,也没有显示出来。


function change(name){
    $('#'+name).siblings('input').val($('#'+name).find('option:selected').text());
}

以上就是实现效果的全过程~~~~~

转载于:https://www.cnblogs.com/llff123/p/8399569.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用JavaScript和HTML来实现搜索框下拉框,并且在搜索框的值发生变化时,下拉框的选项也会相应地变化。以下是一个简单的实现示例: HTML代码: ``` <div class="dropdown"> <input type="text" placeholder="Search" id="searchInput" onkeyup="filterOptions()"> <button class="dropbtn" onclick="toggleDropdown()">▼</button> <div class="dropdown-content" id="dropdownContent"> <a href="#">Option 1</a> <a href="#">Option 2</a> <a href="#">Option 3</a> <a href="#">Option 4</a> <a href="#">Option 5</a> <a href="#">Option 6</a> </div> </div> ``` JavaScript代码: ``` // 获取下拉框搜索框 var dropdownContent = document.getElementById("dropdownContent"); var searchInput = document.getElementById("searchInput"); // 显示/隐藏下拉框 function toggleDropdown() { dropdownContent.classList.toggle("show"); } // 过滤下拉框选项 function filterOptions() { // 获取搜索框的值 var filter = searchInput.value.toUpperCase(); // 获取所有选项 var options = dropdownContent.getElementsByTagName("a"); // 遍历所有选项 for (var i = 0; i < options.length; i++) { var option = options[i]; // 如果选项的文本中包含搜索框的值,则显示该选项,否则隐藏该选项 if (option.innerHTML.toUpperCase().indexOf(filter) > -1) { option.style.display = ""; } else { option.style.display = "none"; } } } ``` CSS代码: ``` /* 下拉框样式 */ .dropdown { position: relative; display: inline-block; } /* 按钮样式 */ .dropbtn { background-color: #4CAF50; color: white; padding: 8px; font-size: 16px; border: none; cursor: pointer; } /* 下拉框内容样式 */ .dropdown-content { display: none; position: absolute; z-index: 1; background-color: #f1f1f1; min-width: 160px; overflow: auto; border: 1px solid #ddd; max-height: 200px; } /* 选项样式 */ .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; } /* 显示下拉框 */ .show { display: block; } ``` 这个示例实现一个搜索框下拉框,当搜索框的值发生变化时,下拉框的选项也会相应地变化。你可以根据自己的需要修改样式和选项列表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值