Textboxlist解决中文支持问题

Textboxlist可以写出类似facebook那样的点名功能,还能进行autosuggest自动提示表单,用起来非常方便;

但网上所有的例子都是英文表单的自动匹配,直接输入中文字符是不会显示匹配结果的,不能不说非常遗憾;

花了两天时间研究了一下Textboxlist.autocomplete.js,对其中的代码进行了小规模的改动,终于能支持中文了,赞一下自己~!O(∩_∩)O~

其实只要定位到显示匹配结果的代码就比较容易了:

		filter: function(values, search, insensitive, max){
			var newvals = [], regexp = new RegExp('\\b' + escapeRegExp(search), insensitive ? 'i' : '');
			for (var i = 0; i < values.length; i++){
				if (newvals.length === max) break;
				if (regexp.test(values[i][1])) newvals.push(values[i]);
			}
			return newvals;
		},

这就是显示匹配结果的代码,filter方法会对结果进行筛选,用到了正则表达式,而中文字符根本不需要那么复杂的正则表达式,改成这样:

		filter: function(values, search, insensitive, max){
			var newvals = [], regexp = new RegExp(search);
			for (var i = 0; i < values.length; i++){
				if (newvals.length === max) break;
				if (regexp.test(values[i][1])) 
				newvals.push(values[i]);
			}
			return newvals;
		},

可以看到复杂的正则表达式被改成了简单的一个"search"——要什么汉字就匹配什么汉字;这样一来输入中文字符就有结果显示出来了!

如果还要实现关键字高亮的效果,也需要修改下面的highlight方法中的正则表达式,将highlight方法改成这样:

		highlight: function(element, search, insensitive, klass){
			var regex = new RegExp(search);
			return element.html(element.html().replace(regex, '<span class="'+ klass +'">' + search + '</span>'));
		}

也是改成很简单的“search”,这样就OK啦~!

这个插件用到json的文本格式,而json只支持utf-8的编码格式,所以后台在向前台传递数据的时候还需要转换一下编码,这里用到了两个函数,iconv()和preg_repalce():

	function autosuggest(){
		$sql = & $this->_model('project');
		$data=$sql->listallnames();
		$response=array();
		foreach( $data as $key=>$value){
		$value['avatar']=empty($value['avatar']) ? 'upfiles/avatar/noavatar.gif': $value['avatar'] ;//若没有头像则使用默认头像
		$response[$key]=array($key,iconv('gbk','utf-8',$value['name']),null,'<img src="'.SITE_URL.'/'.$value['avatar'].'" width="30px" height="30px"/>'.'<span style="height:30px;vertical-align:top;">'.iconv("gbk","utf-8",$value["name"]).'</span>');//响应的html内容:头像+姓名
		}
		header("Content-type: application/json;charset=gbk");
		$code = json_encode($response);
		$json = preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'gbk', pack('H4', '\\1'))", $code);//iconv()函数可以方便的实现各种不同编码格式的转换;数据传递到前台后,中文字符都变成\u4e00,\u9fa5这种USC-2格式的字符,preg_replace函数将这些字符重新转换成GBK
		echo $json;
	}

这是我后台的php代码,读者可以参考Textboxlist代码包中自带的实例来阅读,实现的是同样的效果。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值