为了账号安全,请及时绑定邮箱和手机立即绑定

为什么可以与服务器交换数据,但是却不能显示下拉菜单呢

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>搜索框制作</title>

<style type="text/css">

body{

background-color: #333;

}

#bg{

background-image: url(images/river.jpg);

width: 1230px;

height: 768px;

margin: 0 auto;

position: relative;

}

.wrap{

position: absolute;

top: 120px;

left: 170px;

}

.logo{

background-image: url(images/logo.png);

width: 107px;

height: 53px;

float: left;

margin: -4px 15px 0 0;

}

form{

float: left;

background:#fff;

padding: 5px;

}

input{

border:none;

}

.input-text{

outline: none;

float: left;

height: 30px;

line-height: 30px;

width: 400px;

}

.input-submit{

background-image: url(images/search-button.png);

width: 29px;

height: 29px;

float: left;

cursor: pointer;

}

#search-tips{

width: 439px;

background:#fff;

font-size: 16px;

border:1px solid #817272;

}

#search-tips ul{

list-style: none;

margin: 0;

padding: 0;

}

#search-tips ul li{

padding: 3px;

height: 25px;

line-height: 25px;

}

#search-tips ul li:hover{

cursor: pointer;

background: #999;

}

</style>

</head>

<body>

<div id="bg">

<div>

<div></div>

<form action="https://www.bing.com/search" target="_blank" id="search-form">

<input type="text" id="search-input" autocomplete='off'/>

<input type="submit" value="" />

</form>

</div>

</div>

<div id="search-tips" style="display:none">

<ul id="search-result">

<li>搜索结果1</li>

<li>搜索结果2</li>

</ul>

</div>

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>

<script type="text/javascript">

/*//当搜索框有键盘按下时执行函数

$('#search-input').bind('keyup',function(){

//获取搜索框的值(要搜索的关键词)

var searchText=$('#search-input').val();

//从服务端请求数据

$.get('http://api.bing.com//qsonhs.aspx?q='+searchText,function(d){

//获取服务端返回的结果存到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-tips').show().css({

position:'absolute',

top:$('#search-form').offset().top+$('#search-form').height()+10,

left:$('#search-form').offset().left-1

});

},'json')

})

//当点击页面上的某一处时,隐藏下拉菜单

$(document).bind('click',function(){

$('#search-tips').hide();

})

//事件代理,当点击li时,跳转到相应的链接

$(document).delegate('li','click',function(){

//获取li元素里的文本

var keyword=$(this).text();

//跳转到相应页面

location.href='http://cn.bing.com/search?q='+keyword;

})*/

//封装函数。通过一个元素的id获取该元素

var getDOM=function(id){

return document.getElementById(id);

}

//

var addEvent=function(id,event,fn){

//如果有传'id'这个参数就获取这个元素,没有的话就用document,防止浏览器报错。

var el=getDOM(id)||document;

//兼容非IE浏览器

if (el.addEventListener) {

el.addEventListener(event,fn,false);

}else{

//兼容IE浏览器

el.attachEvent('on'+event,fn);

}

}

var getoffsetTop=function(element){

var actualltop=element.offsetTop;

//离当前元素最近的祖先定位元素。

var current=element.offsetParent;

while(current!=null) {

actualltop+=current.offsetTop;

current=current.offsetParent;

};

return actualltop;

}

var getoffsetLeft=function(element){

var actuallleft=element.offsetLeft;

var current=element.offsetParent;

while(current!=null) {

actuallleft+=current.offsetLeft;

current=current.offsetParent;

};

return actuallleft;

}

//url:获取资源的地址,callback:执行回调函数(服务器响应结果的那个函数)

var getajax=function(url,callback){

var _xhr=null;

//在非IE里发送请求的对象

if (window.XMLHttpRequest) {

_xhr=new window.XMLHttpRequest();

}else{

//在IE里发送请求的对象

_xhr=new ActiveObject('Msxml2.XMLHTTP');

}

//服务端的状态发生变化的时候

_xhr.onreadystatechange=function(){

//服务器正确响应并返回信息

if (_xhr.readyState==4&&_xhr.status==200) {

//服务器返回的结果会存放在responseText,这是一个字符串,需要解析成js可以识别的对象

//JSON.parse():将字符串转换成js可以识别的对象。

callback(JSON.parse(_xhr.responseText))

};

}

//发送请求时打开与服务器之前的链接,false指用异步的方式交互数据

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

_xhr.send(null);

}

var delegateEvent=function(target,even,fn){

addEvent(document,even,function(e){

if (e.target.nodeName==target.toUpperCase) {};

})

}

addEvent('search-input','keyup',function(){

//获取搜索框上的搜索内容

var searchText=getDOM('search-input').value;


//url地址的规则由服务器决定

getajax('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.lenth;i++){

html+='<li>'+d[i].Txt+'<li>';

}

getDOM('search-result').innerHTML=html;

getDOM('search-tips').style.top=getoffsetTop(getDOM('search-form'))+42+'px';


getDOM('search-tips').style.left=getoffsetLeft(getDOM('search-form'))+'px';

getDOM('search-tips').style.position='absolute';

getDOM('search-tips').style.display='block';

})


})



addEvent(document,'click',function(){

getDOM('search-tips').style.display='none';

})

</script>

</body>

</html>

http://img1.sycdn.imooc.com//58aacb910001328f12590486.jpg

正在回答

1 回答

http://img1.sycdn.imooc.com//58ab0cc400017f3613210609.jpg

服务器可以交互数据   但是不显示菜单勒

0 回复 有任何疑惑可以回复我~
#1

慕粉18144024425 提问者

为什么,你知道原因吗
2017-02-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
搜索框制作
  • 参与学习       66041    人
  • 解答问题       431    个

本课程从简入深讲解搜索框的制作,学习JQ与JS实现Ajax技术的不同点

进入课程

为什么可以与服务器交换数据,但是却不能显示下拉菜单呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信