支持缓存的autocomplete组件

网上也找了一些,但是还是想自己写一个,无奈自己的html太差,带下拉框的文本框 这种效果做不出来...所以只把功能实现了,数据展示就没做...

思路: 键盘输入值---若通过检查,则先到缓存中查找---若缓存中没有,则发ajax请求,获取---再把新得到的值加入缓存中...这里的缓存区域但是DOM树的一个DIV,我命名为cachArea..

下面是这个页面的html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>autocomplete demo</title>

<script type="text/javascript" src="script/jquery.min.js"></script>

<script type="text/javascript">

//每一次javascript运行时 封装DOM缓存中的数据	
var cach = new Array(30); 

//对给定的id的控件,执行自动完成功能
function query( id ){

	
	var text = $("#"+id).val();	//获取值
	
	var checked = checkValue(text); //检查值是否符合规则
	if(checked == false ) return;
	
	var key = checked;
	initCach();	//初始化缓存
	var keyData = queryCach(key); //从缓存中查询数据
	if( keyData == false ){	//若缓存中不存在,发异步请求
		jQuery.ajax({
			url : "AutoCompleteAction.do",
			type : "POST",
			dataType: "json",
			data : {key:text},
			success : callback,
			cache : true,
			async : true
		});
	} else {	//做缓存中存在,则读取数据
		var cachtData = keyData.data;
		//.....在autocomplete组件中显示结果..
		// 这个组件暂时不会写..html基础较差..
		
		alert(" from cach :"+cachtData);
	
	}
}

function callback( ajaxData ){
	alert(" from ajax :"+ajaxData);
	//.....在autocomplete组件中显示结果..
	// 这个组件暂时不会写..html基础较差..
	addCach(ajaxData);
}


//将异步请求的结果放入缓存
function addCach( data ){
	var cachSize = $(".cach").size();
	if( cachSize < 10 ){
		$("#cachArea").append(' <input type="hidden" name="'+data.key+'" value="'+data.data+'" class="cach" />');
	}else{
		 $(".cach").eq(0).remove();
		 $("#cachArea").append(' <input type="hidden" name="'+data.key+'" value="'+data.data+'" class="cach" />');
	}
}


//从缓存中查询取出key的数据
function queryCach( key ){
   var data;
	for( i=0;i<cach.length; i++ ){
		data = cach[i];
		if(data){
			var keyData = data.key;
			if( keyData == key ){
				return data;			
			}
		}
	}
	return false;
}


//初始化缓存,从dom树种读取数据,用数组保存
function initCach(){
	$.each($(".cach"), function(i, obj) { 
		cach[i] =  {key: $(this).attr("name"),data:$(this).val()}	  
	});
}


//检查值是否不合规则
function checkValue( value ){
	
	if( !value || value == "" || checkSpace(value)){
		return false;
	}
	
	return trim(value);
}


//去除左边的空格
function trimLeftSpace(str){
	
	var char0 = str.charAt(0);
	if( char0 != " " ){
		return str
	}
	
	var tempStr = str.substring(1,str.length);
	
	return trimLeftSpace(tempStr);
}

//取出右边的空格
function tirmRightSpace(str){
	var c = str.charAt(str.length-1);
	if( c != " " ){
		return str
	}
	
	var tempStr = str.substring(0,str.length-1);
	
	return tirmRightSpace(tempStr);
}

//取出左右两边的空格
function trim( value ){
	return tirmRightSpace(trimLeftSpace(value));
}


//检查是否所有字符都为空格
function checkSpace( str ){
	for(i=0;i<str.length;i++){
		var c = str.charAt(i);
		if( c != " ")
			return false;
	}
	
	return true;
}

</script>
</head>
<body>

	<input type="text" name="auto_complete_text" id="auto_complete_text" οnkeyup="query('auto_complete_text')"/>
	
	<div id="cachArea"></div>

</body>
</html>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值