JQueryUI自动补全 搜索提示实践

最近在做航运运价平台,有一个业务逻辑是需要在搜索的时候有搜索提示的,没法子,没写过,在找了很久解决方案还没有找到,快崩溃了的时候,忽然发现了jquery UI 的自动补全机制,完全符合啊,大救星。

首先描述下用户的需求,这里我们需要的是输入港口的英文名称或中文名称,然后出现搜索提示,当用户点击后,只将英文的放入搜索框中,因为运价里的港口都是英文字符,没有中文字符。

所以,我需要做的就是:1.将港口全部录入数据库 2.在用户输入的时候显示搜索提示 3.用户点击后显示英文字符。

OK,逻辑很清晰,开始动工。

数据输入数据库,这一步就不赘述了。

搜索提示的时候,用的是JQueryUI的自动补全机制

1. 对我们的输入表单应用自动补全。

$('#startport').autocomplete(option);
2. 从服务器端获取数据源,我这里应用ajax异步请求数据

/**************数据源为ajax返回的值**********************/
		source: function(request, callback) {
			var data = "term=" + request.term;
			$('#result').html(data);

			/*************ajax请求数据************************/
			$.get(appPath + "/Street/startportSearchTips", data, function(data) { 
				var response = data.content;
				var tips = [];

				$(response).filter('li').each(function() {
					tips.push($(this).text());
				});
				callback(tips);
			});
		},
服务器端:

$querystring = $_GET['term'];  
        if(strlen($querystring) >0) { 
            $condition['portname'] = array('like', "%$querystring%");
            $result = $startDB->where($condition)->limit(5)->select();
            $data['status'] = 0;
            foreach($result as $key => $value){
                $data['content'] .= '<li>'.$value['portname'].'</li>'; 
            }  
            $data['term'] = $_GET['term'];
            $this->ajaxReturn($data);
        }else{
            $data = array('status' => 0, 'content' => '没有匹配');
            $data['test'] = "没有匹配";
            $data['term'] = $_GET['term'];
            $this->ajaxReturn($data); 
        }  
当服务器检索到数据后,按格式用ajax返回,然后在js里面接收,再转变成数组的形式,用回调函数返回给source,作为数据源

3. 让建议列表更好看点,设置下样式,这里是淡出的特效

/****************打开建议列表时的样式设置***************************/
        open:function(event){
            var $ul = $(this).autocomplete('widget');
            $ul.css('width', '200px');
            $ul.css('font-size', '14px');
            $ul.css('font-family', '微软雅黑');
            $ul.hide().slideDown(1000);
        },
4. 最后一步,选择某一项时,只上去英文字符,因为数据库中是间隔空格分开的,所以这里用空格截取
/****************在选择某一项的时候,只显示英文字符*****************/
		select: function(event, ui) {
			//截取英文字符
			var str = ui.item.value.substr(0, ui.item.value.indexOf(' '));
			return ui.item.value = str;
		}

最后的效果:

可以去我们的网站看看:《订单工厂》搜索提示演示


Tony, 2014.10.13 于TCS工作室







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值