`
xwhoyeah
  • 浏览: 91619 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

jquery.ui.autocomplete 扩展:无限下拉

阅读更多
扩展自 jQuery.ui.autocomplete, 实现无限下拉功能。

使用场景:下拉列表数量巨大,并且可以分多次加载完成。

使用限制:source 需是 Function, 其他情况请使用jQuery.ui.autocomplete。

实现原理:在autocomplete中添加scroll事件,判断列表中最后一个项目是否被显示。
         当最后一个项目被显示时,调用 search(最终调用 source) 加载后续数据。
Depends:
       jquery.ui.autocomplete.js



/*!
 *
 * 扩展自 jQuery.ui.autocomplete, 实现无限下拉功能。
 * 
 * 使用场景:下拉列表数量巨大,并且可以分多次加载完成。 
 * 
 * 使用限制:source 需是 Function, 其他情况请使用jQuery.ui.autocomplete。
 * 
 * 实现原理:在autocomplete中添加scroll事件,判断列表中最后一个项目是否被显示。
 *        当最后一个项目被显示时,调用 search(最终调用 source) 加载后续数据。
 *
 * 
 * Depends:
 *	jquery.ui.autocomplete.js
 */
(function( $, undefined ) {

//输入的值是否发生了变化。
//_searchTimeout中设置为true,//this._on( "scroll") 中设置为 false。
//在__response和_suggest 中被使用。
var termChanged = true;

//用于防止多次调用 search 方法。
var lastEleAppeared  = false;

$.widget( "ui.autocompleteEx", jQuery.ui.autocomplete, {
	version: "1.10.3",

	_create: function() {
		this._super( );
		this._on( this.menu.element, {
			scroll : function(){
				var menuElement = this.menu.element;
				var lastEle = menuElement.children(":last");				

				var eleTop = lastEle.offset().top;
				var maxTop = menuElement.offset().top + menuElement.height();
				var minTop = maxTop - lastEle.height();

				if( eleTop > minTop && eleTop < maxTop ){
					if( lastEleAppeared !== true){//如最后一个元素被显示,则需加载后续数据。
						lastEleAppeared = true;
						termChanged = false;
						var tmp = this.term;
						this.search( this.term );
						this.term = tmp;
					}
				}else{
					lastEleAppeared = false;
				}
			}
		});
	},

	_searchTimeout: function( event ) {
		clearTimeout( this.searching );
		this.searching = this._delay(function() {
			// only search if the value has changed
			if ( this.term !== this._value() ) {
				this.selectedItem = null;
				termChanged = true;//*****
				this.search( null, event );
			}
		}, this.options.delay );
	},

	_response: function() {
		var that = this;
		return function( content ) {
			that.__response( content );
			that.pending--;
			if ( !that.pending ) {
				that.element.removeClass( "ui-autocomplete-loading" );
			}
		};
	},

	__response: function( content ) {
		if ( content ) {
			content = this._normalize( content );
		}
		this._trigger( "response", null, { content: content } );
		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
			this._suggest( content );
			this._trigger( "open" );
		} else {
			// use ._close() instead of .close() so we don't cancel future searches
			if( termChanged ){//*****
				this._close();
			}//*****
		}
	},

	_suggest: function( items ) {
		//*****
		var ul = this.menu.element;
		if( termChanged ){
			ul.empty();
		}
		//*****
		this._renderMenu( ul, items );
		this.isNewMenu = true;
		this.menu.refresh();

		// size and position menu
		ul.show();
		this._resizeMenu();
		ul.position( $.extend({
			of: this.element
		}, this.options.position ));

		if ( this.options.autoFocus ) {
			this.menu.next();
		}
	},

	_move: function( direction, event ) {
		if ( !this.menu.element.is( ":visible" ) ) {
			this.search( null, event );
			return;
		}
		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
				this.menu.isLastItem() && /^next/.test( direction ) ) {
			//this._value( this.term );
			//this.menu.blur();
			return;
		}
		this.menu[ direction ]( event );
	}
});

$.extend( $.ui.autocompleteEx, {
	escapeRegex: function( value ) {
		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
	},
	filter: function(array, term) {
		var matcher = new RegExp( $.ui.autocompleteEx.escapeRegex(term), "i" );
		return $.grep( array, function(value) {
			return matcher.test( value.label || value.value || value );
		});
	}
});


}( jQuery ));

分享到:
评论

相关推荐

    jquery.autocomplete.js使用示例,可直接运行

    **jQuery Autocomplete.js 插件使用详解** jQuery Autocomplete.js 是一个非常实用的插件,它为HTML输入框提供了自动补全功能,极大地提升了用户体验。这个插件基于jQuery库,结合Ajax技术,能够实时从服务器获取...

    jquery-ui插件

    - **Autocomplete(自动补全)**: 在输入框中提供动态的下拉建议。 ### 2. 使用jQuery UI 要使用jQuery UI,首先需要在HTML文件中引入jQuery库和jQuery UI的CSS及JS文件。例如: ```html &lt;script src="https://...

    jquery实现autocomplete插件(文本框下拉选项).zip

    1. `jquery.combobox.css`:这是样式表文件,用于定义Autocomplete下拉列表的样式,包括颜色、字体、位置等,确保与页面整体风格保持一致。 2. `dropdown.gif`:这是一个图像文件,可能用于下拉列表的箭头图标,提高...

    jquery的autocomplete(自动补全)插件

    **注意:**由于jQuery UI是jQuery的扩展,不同版本之间可能存在兼容性问题。如果遇到问题,确保使用与jQuery版本匹配的jQuery UI版本。在这个压缩包中,提供的`jquery-ui.js`应该已经包含了兼容的jQuery库,无需额外...

    前端项目-jquery.devbridge-autocomplete.zip

    【标题】"前端项目-jquery.devbridge-autocomplete.zip" 是一个专门用于前端开发的自动完成功能包,基于jQuery库构建。它旨在帮助用户在输入框中键入文本时,实时提供相关的建议列表,提高用户体验并加快输入速度。 ...

    jquery-autocomplete 自动填充插件参数使用说明

    jQuery库提供了一个强大的Autocomplete插件,名为jQuery UI Autocomplete,它可以帮助开发者轻松实现这种功能。本文将深入探讨该插件的参数使用,以便开发者能够灵活定制自己的自动填充效果。 首先,我们需要引入...

    自动补全-jquery.autocomplete.js

    在压缩包`jquery-autocomplete`中,除了`jquery.autocomplete.js`源文件,可能还包括CSS样式文件(如`ui-lightness/jquery-ui.css`),用于控制自动补全下拉列表的外观。确保在页面中引入这些样式文件,以保证插件的...

    jquery.autocomplete js包

    `jQuery Autocomplete` 原本是 jQuery UI 的一部分,但现在作为一个独立的插件存在。请注意与不同版本的 jQuery 和 jQuery UI 的兼容性问题。 通过以上介绍,我们了解了 `jQuery Autocomplete` 插件的基本原理、...

    jQuery ui Combobox 扩展

    **jQuery UI Combobox扩展**是基于流行的JavaScript库jQuery和其UI框架jQuery UI的一个自定义组件。这个扩展将传统的HTML `&lt;select&gt;` 元素转化为一个功能更丰富、交互性更强的下拉框,提供了更好的用户体验。它结合...

    基于jquery.ui Autobox 输入框提示.zip

    Autocomplete功能通常通过JavaScript进行动态处理,而jQuery UI是一个基于JavaScript的库,它扩展了基础的jQuery功能,提供了更丰富的UI组件。 【压缩包子文件的文件名称列表】: 132686995960174964 由于文件名...

    jquery.autocomplete的js+css

    由于 `jQuery.autocomplete` 是一个可定制的插件,开发者可以轻松地与其他库(如 Bootstrap、jQuery UI 等)集成,或者添加自定义的事件处理程序,以实现更复杂的功能,如实时搜索建议、保存用户历史记录等。...

    jquery.autocomplete

    `jQuery Autocomplete` 是一个非常流行的 jQuery 插件,它为输入框提供了一个动态下拉建议的功能,让用户在输入时能够快速找到并选择匹配项。这个插件极大地提升了用户界面的交互性和用户体验,尤其在处理大量数据或...

    juery autocomplete.css && juery.autocomplete.js文件下载

    jQuery Autocomplete是jQuery UI库中的一个组件,它提供了一种智能搜索或自动填充的功能,广泛应用于网页表单输入框,以提升用户体验。这个组件通过动态显示与用户输入相匹配的建议列表,帮助用户快速找到他们想要的...

    jquery autocomplete

    首先,确保在页面中引入了 jQuery 和 jQuery UI(包括 Autocomplete 组件)的库。然后,可以使用以下代码初始化 Autocomplete: ```html &lt;input type="text" id="autocomplete-input"&gt; ``` ```javascript $...

    利用Jquery.AutoComplete插件及微软提供的ChineseConverter.dll实现汉字、拼音、简拼模糊搜索

    4. **返回结果**:将匹配到的数据返回给前端,Jquery.AutoComplete插件会自动将这些数据展示为下拉建议列表。 5. **优化体验**:为了提高搜索效率,可以考虑使用索引来加速数据库查询。同时,对于大量数据,可以...

    jquery autocomplete 动态补全例子有说明ajax加载

    jQuery UI库包含了Autocomplete组件,它可以与普通的HTML输入框结合,为用户提供实时的补全建议。当用户在输入框中输入字符时,Autocomplete会触发一个事件,通过AJAX请求从服务器获取匹配的数据,并将结果显示为...

    jquery.ui-1.0组件

    1. **Widgets(小部件)**:这是jQuery UI的基础,包括日期选择器(Datepicker)、对话框(Dialog)、下拉菜单(Autocomplete)、滑块(Slider)、进度条(Progressbar)、可排序列表(Sortable)、可拖放元素...

    PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能_.docx

    &lt;script type="text/javascript" src="ui/jquery.ui.autocomplete.js"&gt; ``` 接下来,创建一个用于输入的文本框,这将是用户触发自动完成的地方: ```html ``` 然后,使用jQuery来初始化autocomplete插件,设置...

    jquery autocomplete js 文件

    **jQuery Autocomplete 知识点详解** jQuery Autocomplete 是一个非常流行且实用的插件,它为HTML输入字段提供自动完成功能。这个插件基于 jQuery 库,使得在网页中实现类似百度搜索框那样的动态下拉建议变得简单易...

Global site tag (gtag.js) - Google Analytics