模糊搜索框

  一直以来对搜索框的模糊搜索很感兴趣,强行学习一波。在了解了ajax之后,借助fiddler总算搞定。

  实现思路:本来要使用完整的效果得从后端返回结果,但惊奇的发现可以借助接口返回的结果完成就开心的借用了。

  步骤:

  1.结构

  

<div class="bg-div">
   <div class="search_box">
       <div class="logo"></div>
       <form id="search_form" action="https://cn.bing.com/search" target="_blank">
           <input type="text" class="input_text" id="search_input" />
           <input type="submit" class="input_submit" value="" />
       </form>
   </div>
   <div class="suggest" id="search-suggest">
       <ul id="search-result">
       </ul>
   </div>
</div>

 

      2.样式

 *{
	 margin: 0;
	 padding: 0;
 }
 body{
	background-color: #333;
 }
 .bg-div{
	background-image: url(river.jpg);
	width: 1228px;
	height: 690px;
	margin: 0 auto;
	position: relative;
 }
 .logo{
	 background-image: url(logo.png);
	 width: 107px;
	 height: 53px;
	 float: left;
	 margin: -4px 18px 0 0;
 }
 form{
	 float: left;
	 background: #fff;
	 padding: 5px;
 }
 .input_text{
	 width: 350px;
	 outline: none;
	 height: 25px;
	 line-height: 25px;
	 float: left;
	 border: 0;
	 position: relative;
 }
 .input_submit{
	width: 29px;
	height: 29px;
	background-image: url(search-button.png);
	border: 0;
	float: left;
 }
 .search_box{
	position: absolute;
	left: 300px;
	top: 200px;
 }
 .suggest{
	width: 388px;
	background-color: #fff;
	border: 1px solid #999;
	position: absolute;
 }
 .suggest ul{
	list-style: none;
 }
 .suggest ul li{
	padding: 3px;
	font-size: 14px;
	line-height: 25px;
	cursor: pointer;
}
.suggest ul li:hover{
	text-decoration: underline;
	background: #e5e5e5;
}

 在js方面由于要通过ajax调用http://api.bing.com/qsonhs.aspx和http://cn.bing.com/search会受到同源策略的影响就用fiddler代理即用本地文件代替远程文件

 js完成

<script>
var getDOM = function(id){ return document.getElementById(id); } //使用此类绑定可以对一个dom元素绑定多个事件,onclick之类的只能绑定一个事件,若重复绑定后面的事件会覆盖前面的 var addEvent = function(id,event,fn){ var el = getDOM(id)||document; if(el.addEventListener){ //非IE el.addEventListener(event,fn,false); }else if(el.attachEvent){ //IE el.attachEvent('on'+event,fn); } } var getElementLeft = function(element){ var actualLeft = element.offsetLeft; var current = element.offsetParent; while(current !== null){ actualLeft += current.offsetLeft; current = current.offsetParent; } return actualLeft; } var getElementTop = function(element){ var actualTop = element.offsetTop; var current = element.offsetParent; while(current !== null){ actualTop += current.offsetTop; current = current.offsetParent; } return actualTop; } var ajaxGet = function(url,callback){ var _xhr = null; if(window.XMLHttpRequest){ _xhr = new window.XMLHttpRequest(); }else if(window.ActiveObject){ _xhr = new ActiveObject('Msxml2.XMLHTTP'); } _xhr.onreadystatechange = function(){ if(_xhr.readyState == 4 && _xhr.status == 200){ callback(JSON.parse(_xhr.responseText)); } } _xhr.open('get',url,false); _xhr.send(null); } var delegateEvent = function(target,event,fn){ addEvent(document,event,function(e){ if(e.target.nodeName == target.toUpperCase()){ fn.call(e.target); } }) } addEvent('search_input','keyup',function(){ var searchText = getDOM('search_input').value; ajaxGet('http://api.bing.com/qsonhs.aspx?q='+searchText,function(d){ var d = d.AS.Results[0].Suggests; var html = ''; for(var i=0;i<d.length;i++){ html += '<li>'+d[i].Txt+'</li>'; } var _dom = getDOM('search-suggest'); getDOM('search-result').innerHTML = html; _dom.style.top = getElementTop(getDOM('search_form'))+38+'px'; _dom.style.left = getElementLeft(getDOM('search_form'))+'px'; _dom.style.position = 'absolute'; _dom.style.display = 'block'; }) })      //点击输入框以外的部分显示的结果隐藏 document.onclick = function(){ getDOM('search-suggest').style.display = 'none'; }
     //为动态生成的li绑定事件 delegateEvent('li','click',function(){ var keyword = this.innerHTML; location.href = 'http://cn.bing.com/search?q='+keyword; })
</script>

 jquery完成

<script src="http://code.jquery.com/jquery-latest.js"></script>
	<script>
	$('#search_input').bind('keyup',function(){
		var searchText = $('#search_input').val();
		$.get('http://api.bing.com/qsonhs.aspx?q='+searchText,function(d){
			var d = d.AS.Results[0].Suggests;
			var html = '';
			for(var i=0;i<d.length;i++){
				html += '<li>'+d[i].Txt+'</li>';
			}
			$('#search-result').html(html);
			$('#search-suggest').show().css({
				top:$('#search_form').offset().top+$('#search_input').height()+14,
				left:$('#search_form').offset().left,
				position:'absolute'
			})
		},'json');
	})
	$(document).bind('click',function(){
		$('#search-suggest').hide();
	})

	$(document).delegate('li','click',function(){
		var keyword = $(this).text();
		location.href = 'http://cn.bing.com/search?q='+keyword;
	})
</script>

 一顿js暴打之后圆满结束。

其中涉及的ajax用法如下:

 1.创建xhr对象

 var _xhr = null;

 if(window.XMLHttpRequest){
             _xhr = new window.XMLHttpRequest();
         }else if(window.ActiveObject){
             _xhr = new ActiveObject('Msxml2.XMLHTTP');
         }
         _xhr.onreadystatechange = function(){
             if(_xhr.readyState == 4 && _xhr.status == 200){
                 callback(JSON.parse(_xhr.responseText));
             }
}

2.发送get/post请求

(1)get

    _xhr.open('get',url,false);
    _xhr.send(null);

(2)post

    _xhr.open('post',url,true);

    _xhr.send(data);

 

  

转载于:https://www.cnblogs.com/yuehenying/p/6752416.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值