当前位置: 首页 > news >正文

基于Jquery UI的autocompelet改写,自动补全控件,增加下拉选项,动态设置样式,点击显示所有选项,并兼容ie6+...

Jquery UI的autocompelete改写

注意:实现功能,除了原版的自动补全内容外,增加一个点击显示所有选项,样式能动态设置。

加载数据的来源为后台数据库读取。

具体代码如下:

引用

从官方下载插件包地址
http://jqueryui.com/download/
我这里只选择了Autocomplete这个,其他工具不用到可以不勾选,最后选好就可以下载了。

要求的是jquery版本比较高,我这里用的是1.11版本,官方下载的里面有演示demo,也附有jquery包。
引用的顺序如下,两个js顺序不能乱了。

<link rel="stylesheet" href="./jqueryui/cs/jquery-ui.css" />
<script src="./jqueryui/js/jquery.js"></script>
<script src="./jqueryui/js/jquery-ui.js"></script>

主体内容引用官方的示例

    <div id="div" style="height:260px;width:300px;overflow:auto;background-color:gainsboro;">

          </br>
            <h3>这是一个分割点1</h3>
            </br>
            <!-- Autocomplete -->
            <h2 class="demoHeaders">Autocomplete</h2>
            <div>
        <span class="autoSpan">
          <input id="autocomplete" title="type &quot;a&quot;">
          <img class="imgUI" id="test_btn" src="./img/suggest_btn.gif"/>
        </span>
            </div>

          </br>
            <h3>这是一个分割点2</h3>
            </br>

            </br>
            <h3>这是一个分割点3</h3>
            </br>

            </br>
            <h3>这是一个分割点4</h3>
            </br>

            </br>
            <h3>这是一个分割点5</h3>
            </br>

            </br>
            <h3>这是一个分割点6</h3>
            </br>
    </div>

以上加入多个分割点是为了让控件能正常显示在有滚动条的页面,并能随着滚动条一起滚动。
easyUI的控件combobox就不能实现这样的效果,一直浮于最上层。

js部分代码:

var availableTags = [
                    "ActionScript",
                    "AppleScript",
                    "Asp",
                    "BASIC",
                    "C",
                    "C++",
                    "Clojure",
                    "COBOL",
                    "ColdFusion",
                    "Erlang",
                    "Fortran",
                    "Groovy",
                    "Haskell",
                    "Java",
                    "JavaScript",
                    "Lisp",
                    "Perl",
                    "PHP",
                    "Python",
                    "Ruby",
                    "测是啊",
                    "测试"
                  ];

//json格式数据:
var availableTagsJSON = [
    { label: "C# Language", value: "C#" },
    { label: "C++ Language", value: "C++" },
    { label: "Java Language", value: "Java" },
    { label: "JavaScript Language", value: "JavaScript" },
    { label: "ASP.NET", value: "ASP.NET" },
    { label: "JSP", value: "JSP" },
    { label: "PHP", value: "PHP" },
    { label: "Python", value: "Python" },
    { label: "Ruby", value: "Ruby" }
];

$( "#autocomplete" ).autocomplete({
    autoFocus: true,
    source: availableTags
});

//点击下拉图片可以实现显示所有选项内容
$('#test_btn').on('click',function (){
    if ( $("#autocomplete").autocomplete( "widget" ).is( ":visible" ) ) {
         $("#autocomplete").autocomplete( "close" );
         return;
    }
    $(this).blur();
    $("#autocomplete").autocomplete('search','');
    $("#autocomplete").focus();
});

对应的css样式为:

.ui-autocomplete {
        max-height: 100px;
        overflow-y: auto;
        /* 防止水平滚动条 */
        overflow-x: hidden;
      }
      input,img{ vertical-align:middle}
      /* IE 6 不支持 max-height
       * 我们使用 height 代替,但是这会强制菜单总是显示为那个高度
       */
      * html .ui-autocomplete {
        height: 100px;
      }
      .autoSpan{
        position:relative;
      }
      .imgUI{
        position:absolute;
        left:112px;
      }

其中图片<img id="test_btn" src="./img/suggest_btn.gif"/>这个是一个向下的箭头
赋予动态的onclick方法,让它可以触发autocomplete的下拉显示所有选项。

$("#autocomplete").autocomplete('search','');这段是为了让控件显示所有内容的
而其中的' ',我在使用的时候要加上一个空格,官方文档说是不用加的,但是要配合后台数据。
加上一个空格,在后台返回的json格式数据的时候,label里开头或者结尾加上一个空格,
就能实现对全部数据的检索。

前端的代码还可以补充动态显示样式,如下:

//封装的调用后台的方法,这里就不适合其他项目了
var jsonstr = get('/QrySelectAction',{typeName:code});
var obj = JSON.parse(jsonstr);
//json内容大致为:
//[{"label": "博客园", "value": "cnblogs","id":"id"},
//{"label": "白兰", "value": "白兰","id":"id"}]

$('#'+code).autocomplete({
        autoFocus: true,
        source: obj,
        select: function(e, ui) {
        //选择后增加一个属性值来存第三个id
        $(this).attr('data-id',ui.item.id);//为了获取到这个控件的id值多增加一个data-id属性
        },
        create: function( event, ui ) {
        // event 是当前事件对象
        // ui对象是空的,只是为了和其他事件的参数签名保持一致
        $(this).val(obj[0].label);
        var width = $(this).width();//获取当前控件的高度
        if(width>127){
           var rew = width-127+112;
           $(this).parent().find('img').css('left',rew+'px');//设置下拉按钮的相对位置
         }
         }
});

后台代码使用的查询数据库返回对应的json.toString,然后在前端用~JSON.parse(jsonstr);~
转换成json格式后,才能让autocomplete读取出来。

后台注意在拼写label的值的时候,多一个空格,这样前端选择的时候给点击显示全部内容使用。

suggest_btn.gif944717-20171124153540984-1325183266.gif

最后效果如下:
944717-20171124154449890-13596711.png

转载于:https://www.cnblogs.com/FWebApp/p/7890937.html

相关文章:

  • 第94天:CSS3 盒模型详解
  • 56.随机产生的id重复问题
  • MS SQL SERVER中的临时表
  • ExtJS 4.2 教程-03:使用Ext.define自定义类
  • 千古奇闻!明朝就已成功试爆两万吨原子弹?
  • C#和sqlserver中生成新的32位GUID
  • linux下安装oracle11g
  • 将文件加入到图形文件里;
  • Eclipse中已安装的插件如何卸载
  • Linux实现vnc管理
  • Redis的复制流程
  • 批处理 去掉变量空格
  • xshell及secureCRT保存日志
  • 微服务架构优缺点
  • SonicWall防火墙IM禁止Skype软件
  • ----------
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • JavaScript新鲜事·第5期
  • Java多态
  • MYSQL 的 IF 函数
  • Yii源码解读-服务定位器(Service Locator)
  • 构造函数(constructor)与原型链(prototype)关系
  • 入门级的git使用指北
  • 使用putty远程连接linux
  • 微服务入门【系列视频课程】
  • 微信开源mars源码分析1—上层samples分析
  • 因为阿里,他们成了“杭漂”
  • 应用生命周期终极 DevOps 工具包
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 阿里云服务器如何修改远程端口?
  • 阿里云移动端播放器高级功能介绍
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #数学建模# 线性规划问题的Matlab求解
  • (14)Hive调优——合并小文件
  • (多级缓存)缓存同步
  • (七)理解angular中的module和injector,即依赖注入
  • (转)创业家杂志:UCWEB天使第一步
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net FrameWork简介,数组,枚举
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • @ConfigurationProperties注解对数据的自动封装
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [Android 13]Input系列--获取触摸窗口
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C++]Leetcode17电话号码的字母组合
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [java] 23种设计模式之责任链模式
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • [JS]JavaScript 简介
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [LeetCode] 2.两数相加