关于JQuery的autocomplete1.11.4版本插件的使用心得

原文链接:http://www.cnblogs.com/miss-radish/p/4586206.html

语言功底不好,像流水账一样的记录一下吧!

网上有很多关于autocomplete的api,我这里就不说这个了,主要记录一下我在项目中遇到的问题,和各种需求

一、如果是ajax出来或者页面加载完通过js创建的节点,我相信你们肯定有遇到插件失效的情况,那怎么解决呢?

a.使用jQuery的on()方法(live()也可以,不过此方法在1.9版本中已经被废弃了)

$("body").on("click","your selector",function(){

  $(this).autocomplete();

});

这里也不一定非要是body对象,可以是你需要获取选择器的父级,但是这个父级必须是页面一渲染完就存在的,否则失效。

b.如果你对autocomplete进行了封装,这时候在回调函数或者使用js创建完之后再调用一次就可以了。

封装的autocomplete方法,eg:

function autocompleteSelf(selector){
  //可能会传其他参数,例如数据源source等等
  $(selector).autocomplete();

}

ajax成功之后调用一下此方法

$.ajax({

    success: function(data){
      autocompleteSelf(".input");
    }

})

二、按键盘上下键,input框内的数据格式和你鼠标点击的自定义格式不对应

这是因为此插件的focus事件填充默认的数据格式。

在按键盘上下键不需要填充选中值的时候可以这样设置

$("selector").autocomplete({
    focus: function(event,ui){
        //取消事件的默认动作
        event.preventDefault();
    }
})

三、自定义下拉数据

官网有个demo,能自定义下拉的数据格式:http://jqueryui.com/autocomplete/#custom-data

官网的demo只有一个input框,调用完全没问题,下拉的自定义数据格式各种顺畅。

可是在开发中,我们可能有两个input同时调用插件,这时候第一个input没有问题,而第二却....

点击第一个input框的时候,看到数据出来了,好开森

啊哦!第二个input框,各种不爽,各种抓狂,立马百度,谷歌一大堆

这是因为如果对象有多个,jQuery默认返回第一个对象,所以在你点击第二个input框的时候在_renderItemData方法中调用this._renderItem,而this并未指向第二个input框生成的下拉列表对象,所以就调用了插件中的_renderItem方法,然后再一看插件中_renderItem方法的return item.label,如果你的数据中没有label属性那么这个值肯定就undefined,所以列表就空空如也

  //autocomplete插件部分代码   _renderMenu: function( ul, items ) {
        var that = this;
        $.each( items, function( index, item ) {
            that._renderItemData( ul, item );
        });
    },

    _renderItemData: function( ul, item ) {
        return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
    },

    _renderItem: function( ul, item ) {
        return $( "<li>" ).text( item.label ).appendTo( ul );
    },

所以你需要遍历插件绑定自定数据列表的方法

这是官网demo的代码

  .autocomplete( "instance" )._renderItem = function( ul, item ) {
      return $( "<li>" )
        .append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
        .appendTo( ul );
    }

我们给他改成这样

.each(function(){
  $(this).autocomplete( "instance" )._renderItem = function( ul, item ) {
      return $( "<li>" )
        .append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
        .appendTo( ul );
    };
})

其他参考资料:http://stackoverflow.com/questions/7410962/jquery-autocomplete-for-2-input-field-same-class

四、点击input就显示数据列表

官网给的demo都是需要输入数据之后才显示下拉列表,客户说:我要一点击就能看到数据,就像select一样。

这时候查看api发现有个minLength的参数,

The minimum number of characters a user must type before a search is performed. Zero is useful for local data with just a few items, but a higher value should be used when a single character search could match a few thousand items.(在执行搜索之前,用户必须输入的最小字符数。当本地数据很少的时候,0就是非常有用的,但是当搜索一个字符会匹配几千条数据的时候,这个参数就应该体现出它更高的价值)

嗯,然后就立马把自己的代码配置上这个参数

$(selector).autocomplete({
        minLength: 0
})

保存,打开浏览器刷新页面,点击input。我靠!怎么没反应!哼哼,在仔细看看api,别人说“执行搜索之前,用户必须输入的最小字符数”,必须输入,你只是点击了并没有输入啊!!!额!!!

然后不难发现,设置成0的时候,你点击了没反应,然后你按一下键盘的上下键,或者删除键,或者其他什么键,额,出来了!

好!!那就简单了,既然我点击你不出来,非要我按一下键盘你才出来,那我在调用完插件之后再触发keydown事件,那不就可以了,说干就干

$(selector).autocomplete({
        minLength: 0
}).click(function(){
        $(this).trigger("keydown");
});

鼓掌!啪啪啪啪啪啪!!!!

原文链接:http://www.cnblogs.com/miss-radish/p/4586206.html

暂时我想到的在开发中遇到的问题就这些,后面如果记起了再更新

时间: 2024-08-14 01:56:09

关于JQuery的autocomplete1.11.4版本插件的使用心得的相关文章

jquery判断浏览器版本插件,jquery-browser.js

一.jquery判断浏览器版本插件,jquery-browser.js jquery 1.9 之后已经删除判断浏览器版本的方法: $.browser.msie $.browser.version 原因是: 注意:通过user agent字符串来检测浏览器不是一个好主意,在1.9中将完全移除该方法,不过你可以使用jQuery Migrate(迁移)插件.或者你可以试试Modernizr. 但如果想用怎么办呢? 二.解决方法: 复制下面的代码,保存为jquery-browser.js,在jquery

Atitit jquery &#160;1.4--v1.11 &#160;v1.12 &#160;v2.0 &#160;3.0 的新特性

Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.html   2016.11 1.1.1. jQuery.htmlPrefilter()1 1.2. 2016.7  jq3.0 新特性1 1.3. Jq3.1新特性 jQuery 3.1.1 发布了,该版本包括一些 BUG 修复和改进.3 1.1. Jquery1.12  jQuery 2.2 和

jQuery UI 1.11 Dialog 垂直居顶,水平居中(头部居中)

jQuery Version: 1.10.2 jQuery UI Version:1.11 Dialog Position setting code: position{ my: "center top", at: "center top", of: window } ---------------------------------------------------------------------------------------- 以下只是我个人记录的内

基于jQuery select下拉框美化插件

今天给大家分享一款基于jQuery select下拉框美化插件,这款插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.  <table>         <tr>             <td>                 <h2>                     演示1</h2>                 <select name="drop1&qu

jquery之ajaxfileupload异步上传插件

来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/download_project_version.php?version_id=6服务器端采用struts2来处理文件上传.所需环境:jquery.jsajaxfileupload.j

jQuery之换肤与cookie插件

有时候一个网页可以有多个皮肤进行选择,也就是不同的背景,或是一整套新的css,能使整个页面变成另一种风格. 这个功能可以用jQuery来实现.外加cookie插件.有了cookie,就可以长时间的保存选择后的背景样式,而不至于每次刷新界面都会转入默认的画面. 效果如下: 代码之div+css研读: <body> <ul id="skin"> <li id="skin_0" title="灰色" class="

jQuery UI 1.10不再支持IE6,jQuery UI 1.11不再支持IE7

jQuery UI 1.10 Upgrade Guide(升级指南)中指出 jQuery UI 1.10 Removed support for IE6 IE6 usage has dropped to a low enough point that jQuery UI no longer finds it necessary to support. As of 1.10.0, some portions of jQuery UI may not work properly in IE6. If

jQuery Dialog弹出层对话框插件

Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js 1 /** 2 * jQuery的Dialog插件. 3 * 4 * @param object content 5 * @param object options 选项. 6 * @return 7 */ 8 function Dialog(content, options) 9 { 10 var defaults = { // 默认值. 11 title:'标题', // 标

Jquery.validate.js表单验证插件的使用

作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例讲解应用.it's perfect. 首先记录一些使用过程中,爱犯的错误: 1>忘记给表单form添加id属性 2>input这些表单标签必须id属性和name属性名字一样.例如:<input type="text" id="name" name=&q