将Select转变为支持输入内容对Select的Option进行筛选的js

Vue - Ant Design Vue 中 <a-select> 选择器组件,既可以选择下拉又可以手动输入文本功能,让 select 选择器同时拥有下拉选择和输入文本(支持手动输入文本和下拉选择) ant组件库的选择器怎么既能选,又能像文本框一样输入。antd-vue的select组件实现既可以输入添加,又可以下拉选择。antdesignselect可输入可选择,既可以输入又可以选择得框,如何实现ant选择器能选择项目还能直接输入文本内容,ant-design-vue中的select选择器,对输入值的进行筛选操作,vue,antdesignvue,select选择器,a-select,a-select实现可下拉选择和手动输入,element-plus组件库中选择器怎么像输入框一样可以输入,既可 阅读详情
/**
 * 将Select转变为支持输入内容对Select的Option进行筛选的js
 * var $select = $("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").filterSelect();
   $(selectDOMRouteProcess).filterSelectReloadOption();// 把selectDOMRouteProcess变为可filterSelect
 */

$(document).ready(function(){ 
	// 这段代码,是遍历所有拥有 TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT 属性的元素,并把他们变为可编辑 
	if($("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").length > 0){
		$("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").filterSelect();
	}
}); 

/**
 * 将Select转化为FilterSelect
 */
$.fn.filterSelect = (function(){
    return function(){
        var $body = $("body");
        this.each(function(i, v){
            var inputVal = "";
        	if($(v).parent().is("div") && $(v).parent().attr("class") == "m-input-select"){
        		return false;// 如果当前Select已经是FilterSelect,则退出.
        	}
            var $sel = $(v);// 得到Select的DOM
            var $div = $('<div class="m-input-select" style="width:'+$sel.width()+'"></div>');//生成覆盖层的DIV,宽度等于原Select宽度
            var $input = $("<input type='text' class='m-input' style='width:"+$sel.width()+"' />");
            // var $wrapper = $("<div class='m-list-wrapper'><ul class='m-list'></ul></div>");
            var $wrapper = $("<ul class='m-list'></ul>");
            $div = $sel.wrap($div).hide().addClass("m-select").parent();
            $div.append($input).append("<span class='m-input-ico'></span>").append($wrapper);

            // 遮罩层显示 + 隐藏
            var wrapper = {
                show: function(){
                    $wrapper.show();
                    this.$list = $wrapper.find(".m-list-item:visible");  //:visible 选择器选取当前可见的每个元素。
                    this.setIndex(this.$list.filter(".m-list-item-active"));//active向活动的链接添加特殊的样式。
                    this.setActive(this.index);
                },
                hide: function(){
                    $wrapper.hide();
                },
                next: function(){
                    return this.setActive(this.index + 1);
                },
                prev: function(){
                    return this.setActive(this.index - 1);
                },
                $list: $wrapper.find(".m-list-item"),
                index: 0,
                $cur: [],
                setActive: function(i){
                    // 找到第1个 li,并且赋值为 active
                    var $list = this.$list, size = $list.size();
                    if(size <= 0){
                        this.$cur = [];
                        return;
                    }
                    $list.filter(".m-list-item-active").removeClass("m-list-item-active");
                    if(i < 0){
                        i = 0;
                    }else if(i >= size){
                        i = size - 1;
                    }
                    this.index = i;
                    this.$cur = $list.eq(i).addClass("m-list-item-active");
                    this.fixScroll(this.$cur);
                    return this.$cur;
                },
                fixScroll: function($elem){
                    // console.log($wrapper);
                    var height = $wrapper.height(), top = $elem.position().top, eHeight = $elem.outerHeight();
                    var scroll = $wrapper.scrollTop();
                    // 因为 li 的 实际 top,应该要加上 滚上 的距离
                    top += scroll;
                    if(scroll > top){
                        $wrapper.scrollTop(top);
                    }else if(top + eHeight > scroll + height){
                        // $wrapper.scrollTop(top + height - eHeight);
                        $wrapper.scrollTop(top + eHeight - height);
                    }
                },
                setIndex: function($li){
                    if($li.size() > 0){
                        this.index = this.$list.index($li);
                        $li.addClass("m-list-item-active").siblings().removeClass("m-list-item-active");
                    }else{
                        this.index = 0;
                    }
                }
            };

            // input 的操作
            var operation = {
                // 文字更变了,更新 li, 最低效率的一种
                textChange: function(){
                    val = $.trim($input.val());
                    $wrapper.find(".m-list-item").each(function(i, v){
                        if(v.innerHTML.indexOf(val) >= 0){
                            $(v).show();
                        }else{
                            $(v).hide();
                        }
                    });
                    wrapper.show();
                },
                // 设值
                setValue: function($li){
                    if($li && $li.size() > 0){
                        var val = $.trim($li.html());
                        $input.val(val).attr("placeholder", val);
                        $input.attr("title", val);
                        wrapper.setIndex($li);
                        $sel.val($li.attr("data-value")).trigger("change");
                    }else{
                        $input.val(function(i, v){
                            return $input.attr("placeholder");
                        });
                    };
                    wrapper.hide();
                    this.offBody();
                },
                onBody: function(){
                    var self = this;
                    setTimeout(function(){
                        self.offBody();
                        $body.on("click", self.bodyClick);
                    }, 10);
                },
                offBody: function(){
                    $body.off("click", this.bodyClick);
                },
                bodyClick: function(e){
                    var target = e.target;
                    if(target != $input[0] && target != $wrapper[0]){
                        wrapper.hide();
                        operation.setValue();
                        operation.offBody();
                    }
                }
            };

            // 遍历 $sel 对象
            function resetOption(){
                var html = "", val = "", defVal = "";
                $sel.find("option").each(function(i, v){
	               	if(i == 0){
	            		defVal = v.text;
	            	}
                    if(v.selected){
                        val = v.text;
                    };
                    html += '<li class="m-list-item'+ (v.selected ? " m-list-item-active" : "") +'" data-value="'+ v.value +'" title="'+ v.text +'">'+ v.text +'</li>';
                });
                if(val.length == 0 ){
               	 val = defVal;
                }
                $input.val(val);
                $input.attr("title", val);
                $input.attr("placeholder", val);
                $wrapper.html(html);
            };
            $sel.on("optionChange", resetOption).trigger("optionChange");
            $sel.on("setEditSelectValue", function(e, val){
                // console.log(val);
                var $all = $wrapper.find(".m-list-item"), $item;
                for(var i = 0, max = $all.size(); i < max; i++){
                    $item = $all.eq(i);
                    if($item.attr("data-value") == val){
                        operation.setValue($item);
                        return;
                    }
                }
            });

            // input 聚焦
            $input.on("focus", function(){
                this.value = "";
                operation.textChange();
                operation.onBody();
            }).on("input propertychange", function(e){
                operation.textChange();
            }).on("keydown", function(e){
                // 上 38, 下 40, enter 13
                switch(e.keyCode){
                    case 38:
                        wrapper.prev();
                        break;
                    case 40:
                        wrapper.next();
                        break;
                    case 13:
                        operation.setValue(wrapper.$cur);
                        break;
                }
            });

            $div.on("click", ".m-input-ico", function(){
                // 触发 focus 和 blur 事件
                // focus 是因为 input 有绑定
                // 而 blur,实际只是失去焦点而已,真正隐藏 wrapper 的是 $body 事件
                $wrapper.is(":visible") ? $input.blur() : ($input.val("").trigger("focus"));
            });

            // 选中
            $wrapper.on("click", ".m-list-item", function(){
                operation.setValue($(this));
                return false;
            });

            setTimeout(function(){
                // for ie
                wrapper.hide();
            }, 1)
            //将wrapper对象绑定到当前select上
            $(v).data("wrapper", wrapper);
        });
        return this;
    };
})();

/**
 * 更新当前FilterSelect的Option
 */
$.fn.filterSelectReloadOption = (function(){
    return function(keepInputValue){
        keepInputValue = keepInputValue || false;
        this.each(function(i, v){
        	var $div = $(v).parent();
        	if($div.is("div") && $div.attr("class") == "m-input-select"){
        		 var $sel = $(v);// 得到Select的DOM
                 var $input = $div.find(":text[class='m-input']");
                 var $wrapper = $div.find("ul[class='m-list']");
                 $wrapper.empty();
             	 var html = "", val = "", defVal = "";
                 $sel.find("option").each(function(i, v){
                	 if(i == 0){
                		 defVal = v.text;
                	 }
                     if(v.selected){
                         val = v.text;
                     };
                     html += '<li class="m-list-item'+ (v.selected ? " m-list-item-active" : "") +'" data-value="'+ v.value +'" title="'+ v.text +'">'+ v.text +'</li>';
                 });
                 if(val.length == 0 ){
                	 val = defVal;
                 }
                if (!keepInputValue) {
                    $input.val(val);
                    $input.attr("title", val);
                    $input.attr("placeholder", val);
                }
                 $wrapper.html(html);
                //获取绑定到当前select上的wrapper对象
                var wrapper = $sel.data("wrapper");
                //更新wrapper对象
                wrapper.$list = $wrapper.find(".m-list-item");
                wrapper.index = 0;
                wrapper.$cur = [];
            }
        });
        return this;
    };
})();

input框下拉提醒js 输入筛选下拉提醒js 立即下载

相关推荐

js实现select组件的选择输入过滤代码

如何实现select组件的选择输入过滤作用,下面有一段js代码,很实用,需要的朋友可以看看

js 解决 select option 过多 ,筛选过滤功能

js 解决 select option 过多 ,筛选过滤功能

Simael的专栏 5584

js实现可输入可选择的select下拉框

本文实例为大家分享了可输入可选择的select下拉框,供大家参考,具体内容如下 1、原理: 1.1将input输入框和select框合并在一起,但是显示出向下点击的按钮: 这种比较容易做到 1.2出现输入值能够自动匹配的功能 动态的加载一个临时的div出现在该input下方,当点击页面中的空白地方,div隐藏。 1.3代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus:registered:"> <meta name="Author" con

js实现带筛选的select

根据网上现有的做了一些更改,参考源: https://www.cnblogs.com/wangzhaobo/p/8984135.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> <title>1213</title> <script src="C:\U...

qq_20426717的博客 823

Ego-Planner实战避坑指南:从环境搭建到仿真运行

本文详细介绍了在Windows系统下,通过WSL2搭建Ego-Planner无人机路径规划算法开发环境的完整流程与实战避坑指南。内容涵盖ROS Noetic安装、第三方依赖库(如Ceres Solver)编译冲突解决、Realsense SDK版本降级处理,以及Gazebo仿真与真机调试的常见问题,旨在帮助开发者高效完成环境配置并成功运行仿真。

weixin_29232507的博客 700

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 203

JS下拉筛选功能

元素)都有一个类别,可以是"fruit"或"vegetable"。当页面加载时,所有的项目默认都是隐藏的。然后,我们为下拉列表添加了一个。在这个示例中,我们将展示如何使用JavaScript和HTML创建一个下拉列表,根据用户选择的不同选项来筛选并显示相关的数据。当用户从下拉列表中选择一个选项时,这个事件处理器会执行,根据用户选择的选项来显示或隐藏相关的项目。在这个例子中,我们有一个下拉列表(元素)和一个项目列表(

geng1025的博客 605

通信原理期末考试试题及答案

五、(总分12分)设某信道具有均匀的的双边噪声功率谱密度在该信道中传输抑制载波的单边带(上边带)信号,并设调制信号m(t)的频带限制在5K HZ,而载波为100 K HZ,已调信号的功率为10KW。:(1)单边带信号的载频为100kHz,带宽B=5kHz,为使信号顺利通过,理想带通滤波器的中心频率为。8、对最高频率为fH的调制信号m(t)分别进行AM、DSB、SSB调制,相应已调信号的带宽分别为。7、设调制信号为f(t)载波为,则抑制载波双边带调幅信号的时域表达式为,频域表达式为。

qq_67692062的博客 2396

js select-option标签切换

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-...

wmeng13的博客 1428

基于FPGA设计的信号分析仪(项目资料ID:28)

基于现场可编程门阵列(FPGA)设计的信号分析仪。该信号分析仪旨在实现对各类信号的精确分析,具备频率、幅度、相位等参数测量功能。通过采用 FPGA 作为核心处理单元,充分利用其并行处理能力和可重构特性,提高了系统的处理速度和灵活性。论文介绍了信号分析仪的总体设计方案,包括硬件电路设计和软件算法实现。

以培养嵌入式工程师为己任 1万+

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

html中option新页面打开,在Select中给Option内容加链接实现点击实现跳转的方法

这篇文章主要为大家详细介绍了在Select中给Option内容加链接实现点击实现跳转的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。我们经常会在网站页面中使用到Select标签,我们知道在网页的在Html中,select元素可创建单选或多选菜单。其中 元素中的 标签用于定义列表中的可用选项。今天织梦361就主要给大家介绍在Select中给Option内...

weixin_39597987的博客 2129

软件测试高频面试题 2026 最新整理(功能 + 自动化)

本文系统整理了2026年软件测试面试高频题目及参考答案,涵盖功能测试、自动化测试及新兴热点领域。功能测试部分包含测试基础概念、用例设计方法、缺陷管理流程等10个必背题;自动化测试部分详细解析工具选择、元素定位、框架搭建等10个热门考点;新增章节聚焦AI测试、安全测试、性能指标等5个前沿话题。参考答案均采用结构化表述,包含定义、区别、适用场景等关键要素,并强调结合项目经验作答。文末提供2026版面试技巧,建议采用"结论-分点-总结"的回答逻辑,重点展现问题解决能力和技术前瞻性。

SmallBull的博客 1973

一个text自动筛选select中option的实例

需求描述:一个文本框和一个下拉选框,分别显示所选客户的ID及Name。要求1.在文本框中可输入数字、英文字符、汉字,以用筛选下拉选框中的信息。2.输入的筛选信息可匹配ID及Name。3.开头匹配即可。  if data(0,0)   if Request("ddlCustID") = "" then    Response.Write ""  Else    respons

SophiaWang的专栏 2627

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

在实车上进行lio-sam测试

PS:将雷达和imu相对固定后,拆下来,原地晃啊晃,直到xyz进度达到百分百,参考gif。标定完成后,会在result文件夹下生成result.txt。

如果想成为中心,那么就到中心去吧。 997

【web前端】可筛选[输入搜索]的select

基于jquery, 带筛选,可搜索的 select 插件。与 select 元素无缝结合,最大程度上,保证 select 的原生性。兼容 ie7 及 以上浏览器

da宗熊专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ant desgin vue2 使用 a-select a-tree-select 实现根据字母和汉字筛选

主要增加show-search 开启搜索功能,然后增加filter-option 传入筛选的方法,返回一个筛选后的数组。主要增加show-search 开启搜索功能,然后增加filter-option 传入筛选的方法,返回一个筛选后的数组。这个是筛选逻辑首先输入汉字匹配包含的,然后是输入字母就判断是拼音首字母的任意组合。我这个写的是公共方法,调用的时候使用import导入,然后再method中添加方法。首先我们需要引入一个js库,来实现汉字与字母的匹配。然后可以做出优化将公共部分移出来。

小夏卷编程的博客,欢迎大家留言讨论 602

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jquery 遍历select option 结果集

"text/javascript" src="js/jquery-1.3.1.js">   "text/javascript" src="js/jquery.suggest.js">   "text/javascript">       jQuery(function() {           jQuery('#deviceType').suggest('local_data');  

lcczzu的专栏 1605

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

多选select,支持匹配输入内容,特殊处理输入不是下拉内容,在点击查看没有下拉内容的情况

【代码】多选select,并且支持匹配输入内容后,匹配不上下拉内容为空的特殊处理。

csstmg的博客 171

可输入的select

.cls1 { position:absolute; left:250px; top:89px; width:216px; height:72px; z-index:1; }.cls2 { position:absolute; left:250px; top:89px; width:95px; height:18px; z-index:2 }input { font-size: 12px; pad

~缘份天空~ 583

vue3+antd select选择器实现下拉框筛选

我是在filterOption方法中通过当前输入的值所在的对象的value和全量下拉框的value做比较,筛选出来符合条件的进行展示。2、:filter-option="filterOption"是展示搜索后的的结果。a-select标签上加入show-search属性,即支持搜索项;提示:请根据searchTitleList.value的结构进行比较。

weixin_42234899的博客 2553

el-select 输入下拉搜索,匹配不到数据时也保留输入值,同时input获取焦点时保留其value值(el-select支持手动输入搜索)

需要注意的地方 1.为了在匹配不到数据时也保留其输入的值,可以用 filter-method 自定义筛选 2. el-select添加上filterable之后,点击展开,点击收起,会导致focus和blur事件不触发,但点击页面其他地方才可正常触发 ,可利用visible-change 事件来解决些问题 3.input获取焦点时保留其value值用focus事件做相关赋值处理 具体实现代码如下 <template> <el-select id="selectInput..

有问题可关注公众号:前端研究院 后台输入问题回复 9683

Select.js高级功能探索:键盘导航、搜索过滤与动态数据加载终极指南

Select.js是一个基于Tether构建的可样式化选择元素库,它旨在尽可能复制原生选择控件的行为,同时允许通过CSS进行完全样式定制。这个强大的JavaScript库为开发者提供了丰富的功能,包括键盘导航、实时搜索过滤和动态数据加载等高级特性,让Web表单交互体验达到专业级水准。 ## 🔍 为什么选择Select.js? Select.js与其他选择器替换方案不同,它从设计之初就致力于提

gitblog_00560的博客 485

iview Select 组件 过滤功能 多项条件过滤

<Select v-model="formValidate.val" filterable clearable multiple placeholder="请输入" > <Option v-for="item in uData" :key="item.e...

shenmeyaonie的博客 764

multi.js:让多选下拉框焕发新生的终极解决方案

multi.js 是一款专为提升多选下拉框用户体验设计的轻量级 JavaScript 库,它能将原生枯燥的多选框转变为直观易用的双栏选择界面。无论是在表单设计还是数据筛选场景中,multi.js 都能帮助开发者轻松实现优雅的多选交互效果。 ## 📌 为什么选择 multi.js? 原生 HTML 的多选下拉框(`<select multiple>`)存在诸多体验痛点:需要按住 Ctrl 键才

gitblog_00033的博客 348
上一篇: dragsort html拖拽排序 的应用
下一篇: 浅谈 DML、DDL、DCL的区别
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值