项目中考虑到下拉框从后台动态获取的值比较多,用户体验不是很好,就考虑到下拉框既可以下拉选择,也可以手动填写,从网上查了一下,jquery.editable-select这个插件还挺符合就拿来用了。 插件下载地址: 这里先说一下大概用法(这里也是网上找的):

<select  id= "test" >
              <option value="1111">afgef</option>
         
              <option value="2222">adfge</option>
          
             <option value="3333">adssy</option>
          
             <option value="4444">adsa1</option>
          
             <option value="5555">ace00</option>
         
             <option value="6666">abcd2</option>
         
             <option value="7777">abcd1</option>
         
             <option value="8888">a8181</option>
          </select>

JQuery调用的时候:

$('#test').editableSelect(
     {
       bg_iframe: true, //是否加iframe
       onSelect: function(list_item) {
         //当改变select下拉选项值的时候调用
         $('#ddd2').val(this.text.val());
       },
       case_sensitive: false, // 是否匹配
                              
       items_then_scroll: 10 ,// 设置下拉选项的数目
       isFilter:true //是否根据条件过滤下拉选项
     }
   );

上面就是网上大概的用法,接下来说一下我遇到的问题以及注意事项:

本人前端是个菜鸟,也就大概看了一下插件里面的源码,自己理解了一下(如有错误,欢迎留言指正):

首先会隐藏原来的select框,拼接一个input输入框和一个隐藏域,读取select下所有的数据赋值给<ul>标签下的<li>,

li里的value值就是我们option标签里的value值,li里的text就是option中的文本,这里问题就来了:

首先上代码:

jsp页面:


<label class="header-label" style="margin-left:3%; ">客户名称</label>
	<select id="custselect" style="visibility: hidden;width:241.5px;">
		<option value="" selected="selected" ></option>
			<c:forEach items="${custMap}" var="map">
				<option value="${map.key}" >${map.value}</option>
			</c:forEach>
	</select>

js里面:


$(function () {
   
    $("#custselect").editableSelect({
    	isFilter:true,
    	bg_iframe: true,
    	case_sensitive: false, 
        items_then_scroll: 10  //十条显示滚动条
    });
})




这里要加一个option标签,否则插件生成input框里默认是一个上面循环出来的第一个值,由于我里面的map.key是从后台传过来的字符类型的数据,我在测试的时候,取$("#custselect").val(),无论取哪个下拉框的值,都是0,在网上搜了一下也有遇到这个问题的,但是没有给出很好的解决办法,这里首先说一下,由于插件里是把值放到li标签里了,从页面可以看出来:

jquery 下拉框 append函数_jquery 下拉框 append函数

注:ul 中的li定义的value会自动转换为int.数值,ie 浏览器下大于int最大值,显示int最大值,其他浏览器显示为0.而且无论你定义什么值,都会转int.默认为1

这就是无论怎么value值取都是0的原因,所以改一下源码就行了,

jquery 下拉框 append函数_数据_02

jquery 下拉框 append函数_jquery 下拉框 append函数_03

jquery 下拉框 append函数_jquery 下拉框 append函数_04

jquery 下拉框 append函数_数据_05

改过以后,就可以正常的取到$("#custselect").val()的值了,页面上也能看出来:

jquery 下拉框 append函数_jquery 下拉框 append函数_06