zoukankan      html  css  js  c++  java
  • jquery.autocomplete联想补全插件及使用中遇到的问题

     一、jquery.autocomplete.js插件的使用

    1、获取后台数据

    $("#scenic_name").flushCache(); //刷新缓存(非常重要)
    $('#scenic_name').autocomplete({
        minChars: 0,
         '12.5%',
        matchCase:false,//不区分大小写
        scroll: true,
        dataType: 'json',    
        scrollHeight: 400,
        delay:100,
        matchContains: true,//是否只要包含文本框里的就可以
        //此处为传递参数
        extraParams: { prov_id: function() { return $("#prov_id").find("option:selected").val(); }, city_id: function() { return $("#city_id").find("option:selected").val(); }},
        //需要把data转换成json数据格式                      
        parse: function(json) {
        return $.map(eval(json.data), function(row) {
          return {
            data: row,
            value: row.name,    //此处无需把全部列列出来,只是两个关键列
            result: row.scenic_id 
          }
        });
      },
        formatItem: function(data, i, total) {  // 格式化列表中的条目;row:条目对象,i:当前条目数,total:总条目数
        // 该条语句判断没有符合条件是数据时,将默认的undefined提示修改
        if(data[0]== "No Records."){
          return `<button data-id="${data.scenic_id}"  disabled>暂无相关景区</button>`; 
        }else{
          return `<p data-id="${data.scenic_id}">${data.name}</p>`; 
        }
        },
        formatMatch: function(data, i, total) {
        return data.name;
        },
        formatResult: function(data, value) {
        return data.name;   
        }
    }).result(function(event, data, formatted) { //回调
        $("#scenic_name").val(data.name); 
        $("#scenic_id").val(data.scenic_id); 
        // 选中时进行表单验证
        $('#addTicketBaseForm').validate().element($("#scenic_name"))
      });             

     2、获取前台数据

    var scenicArr= [{"scenic_id":"1001","name" : "北京长城"},{"scenic_id":"1002","name" : "故宫"}];
    $('#scenic_name').autocomplete(scenicArr, {
      minChars: 0,
       '12.5%',
      matchCase:false,//不区分大小写
      scroll: true,
      dataType: 'json',    
      scrollHeight: 400,
      delay:100,
      matchContains: true,//是否只要包含文本框里的就可以
      formatItem: function(data, i, total) {  // 格式化列表中的条目;row:条目对象,i:当前条目数,total:总条目数
        if(data[0]== "No Records."){
          return `<button data-id="${data.scenic_id}"  disabled>暂无相关景区</button>`; 
        }else{
          return `<p data-id="${data.scenic_id}">${data.name}</p>`; 
        }
      },
      formatMatch: function(data, i, total) {
        return data.name;
      },
      formatResult: function(data, value) {
        return data.name;   
      }}
    ).result(function(event, data, formatted) { //回调
        $("#scenic_name").val(data.name); 
        $("#scenic_id").val(data.scenic_id); 
        // 选中时进行表单验证
        $('#addTicketBaseForm').validate().element($("#scenic_name"))
      });

    插件的使用可参考以下这篇文章,里面也有很详细的参数说明:https://www.cnblogs.com/guo0/archive/2012/01/10/2318140.html

    二、在使用该插件时遇到的问题:

    1、第一次点击输入框不会出现下拉框,要点击两次或者按回退键才行。改成单击时触发的方法为:

    将插件源码中的

    if ( hasFocus++ > 1 && !select.visible() ) {
        onChange(0, true);
    }
    改为
    if ( ++hasFocus > 1 && !select.visible() ) {
       onChange(0, true);
    }
     
    踩坑记录:
    (1)minChars设置为0是默认双击触发插件
    (2)给输入框添加 onclick="$(this).click();" 事件,结果进入死循环,网页崩了
     
    2、
  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/plb2307/p/11156409.html
Copyright © 2011-2022 走看看