大家都知道select下拉框是最难美化的。这里有个Jquery的插件可以使下拉框变的魔幻起来。
Jquery chosen插件。
用到的文件
Jquery.js,chosen.jquery.js,chosen.css
然后定义一个select下拉框,把select的class加上"chzn-select"就OK了,非常的方便,然后调用js把下拉框渲染出来
<script>$(".chzn-select").chosen();</script>这样就搞定了。
要远程加载数据的话还是要动点手脚的,先把他的样式全部去掉,然后把数据加载出来之后再渲染下拉框。
下面是一个例子。
- <!DOCTYPE html>
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ include file="/common/taglibs.inc" %>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link type="text/css" rel="stylesheet" href="${ctx}/chosen/chosen.css"/>
- <script type="text/javascript" src="${ctx}/js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="${ctx}/chosen/chosen.jquery.min.js"></script>
- <title>测试下拉框</title>
- </head>
- <body>
- <select class="chzn-select" data-placeholder="Choose" style="width:350px;" id="select_area" onchange="showCity()">
- <option></option>
- </select>
- <br>
- <br>
- <select class="chzn-select" style="width:350px;" id="select_province" >
- <option></option>
- </select>
- <script type="text/javascript">
- $(document).ready(function(){
- $.ajax({
- type:'post',
- url:'${ctx}/base/area!ajaxGetAllArea.action',
- async:false,
- dataType:'json',
- success:function(data){
- var selectObj = $("#select_area");
- var selectpro=$("#select_province");
- selectObj.parent().children().remove('div');
- selectObj.removeClass();
- for(var i=0;i<data.length;i++){
- var option=new Option(data[i].name,data[i].key);
- selectObj.get(0).options.add(option);
- }
- selectObj.addClass("chzn-select");
- selectObj.chosen();
- selectpro.chosen();
- }
- });
- });
- function showCity(){
- var parentId=document.getElementById("select_area");
- $.ajax({
- type:'post',
- url:'${ctx}/base/area!ajaxGet.action',
- data:'id='+parentId.value,
- dataType:'json',
- async:false,
- success:function(data){
- var selectObj = $("#select_province");
- selectObj.parent().children().remove('div');
- selectObj.removeClass();
- var selectArea=$("#select_area");
- selectArea.parent().children().remove('div');
- selectArea.removeClass();
- for(var i=0;i<data.length;i++){
- var option=new Option(data[i].name,data[i].key);
- selectObj.get(0).options.add(option);
- }
- selectObj.addClass("chzn-select");
- selectArea.addClass("chzn-select");
- selectObj.chosen();
- selectArea.chosen();
- }
- });
- }
- </script>
- </body>
- </html>
效果图:
chosen还有个问题就是附带一个模糊查询,但是中文只能从第一个中文开始搜,这样就比较麻烦和没多大用处了。
解决方法:在chosen.jquery.js里面修改一下,Chosen.prototype.winnow_results这个方法里面
if(found)这个判断的上面一个判断,再加一个else if。也就是:
else if((option.html).indexOf(searchText) >= 0){
found = true;
results += 1;
}
这样就可以中文进行模糊查询,不管第几个了。