个人网站创建百度搜索框
2017-07-25 16:31
127 查看
需求分析
点击提交按钮或者按回车键时,将输入框中的内容作为关键字进行百度搜索,在新的页面显示搜索结果。当输入框中的内容变更时,将输入框中的内容作为关键字,用jsonp跨域请求的方式获取百度的suggestion数据,实时显示出来。
当鼠标移动到对应的suggestion项上时,该项高亮,并将输入框中的内容更新为该suggestion的内容。此时点击鼠标或者按回车键时,执行搜索操作。
也可以按键盘上下键来选取对应的suggestion项,按回车键执行搜索操作。注意设置suggestion列表为循环结构,即在最后一项时按下键选中第一项,在第一项时按上键选中最后一项。
当输入框失去焦点时,删除suggestion列表。
代码实现
*1. 基本组件<div> <input id="input_search" type="text" oninput="getSuggestion()" onblur="hiddenSuggestion()" onkeydown="move(event)"> <div id="suggestion" hidden="hidden"> <ul id="suggestionUl"></ul> </div> </div> <div> <input type="button" value="Search" onclick="search()"> </div>
*2. 输入框内容变化时调用getSuggestion方法
function getSuggestion(){ var strdomin = $.trim($("#input_search").val()); //jsonp跨域请求,参数wd为关键字;参数p恒为3,暂时不知道用途;参数cb为请求成功后的回调函数的名字,自己实现这个函数来处理得到的数据 var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'getData' }; $.ajax({ async: false, url: "http://suggestion.baidu.com/su", type: "GET", dataType: 'script', data: qsData, timeout: 500, success: function (json) { }, error: function (xhr) { } }); }
*3. 编写回调函数getData获取suggestion数据并显示
function getData(mydata){//参数mydata即为返回的数据,suggestion以数组形式保存在mydata.s中 //先清除原来的suggesion列表 clearSuggestion(); var length = mydata.s.length; var data = mydata.s; if (length == 0) { //没有请求到suggestion时则不显示suggestion列表 hiddenSuggestion(); } else { //显示suggestion列表 showSuggestion(); //suggestionLength和index是两个全局变量,代表列表项长度和索引,在编写键盘事件函数时会用到 suggestionLength = (length > 10 ? 10 : length); index = 0; for (i = 0; i < (length > 10 ? 10 : length); i++) { var li = $("<li id='li"+i+"' onMouseOver='mouseOverEvent(this)' onMouseOut='mouseOutEvent(this)' onclick='search()'></li>").text(data[i]); $("#suggestionUl").append(li); } } }
*4. suggestion列表的显示、隐藏、清除函数
function showSuggestion(){ $("#suggestion").removeAttr("hidden"); } function hiddenSuggestion(){ $("#suggestion").attr("hidden","hidden"); } function clearSuggestion(){ $("#suggestionUl").html(""); }
*5. 编写鼠标事件函数
function mouseOverEvent(x){ $("#input_search").val(x.innerHTML);//更新输入框的内容 x.className = "mouseOver";//修改样式为高亮 //若不清除onblur属性,在点击鼠标时,将先执行hiddenSuggestion方法,这样鼠标就点击不到对应的suggestion项,无法执行search方法进行搜索 $("#input_search").removeAttr("onblur"); } function mouseOutEvent(x){ x.className = "mouseOut";//将样式恢复原样 $("#input_search").attr("onblur","hiddenSuggestion()"); }
*6. 编写键盘事件函数
function move(x){ if (x.keyCode == 13) {//按回车,则执行搜索操作 search(); } else if (x.keyCode == 40 && index == 0) {//若第一次按下键,则选中第一个suggestion项,并更新索引值 var li0 = document.getElementById("li0"); mouseOverEvent(li0); index = 1; } else if (x.keyCode == 40 && index == suggestionLength) {//若在选中最后一个suggestion项时按下键,则选中第一个suggestion项,并更新索引值 var li0 = document.getElementById("li0"); mouseOverEvent(li0); var li = document.getElementById("li"+(suggestionLength-1)); mouseOutEvent(li); index = 1; } else if (x.keyCode == 38 && index == 1) {//若在选中第一个suggestion项时按上键,则选中最后一个suggestion项,并更新索引值 var li = document.getElementById("li"+(suggestionLength-1)); mouseOverEvent(li); var li2 = document.getElementById("li0"); mouseOutEvent(li2); index = suggestionLength; } else if (x.keyCode == 38) {//按上键的普通情况 var li2 = document.getElementById("li"+(index-1)); index--; var li = document.getElementById("li"+(index-1)); mouseOverEvent(li); mouseOutEvent(li2); } else if (x.keyCode == 40) {//按下键的普通情况 var li2 = document.getElementById("li"+(index-1)); index++; var li = document.getElementById("li"+(index-1)); mouseOverEvent(li); mouseOutEvent(li2); } }
*7. 编写搜索操作函数
//注意要先把输入框中的内容转码,防止出现#截断符号使其后内容被忽略的情况 function search(){ hiddenSuggestion(); var value_search = encodeURIComponent($.trim($("#input_search").val())); window.open("https://www.baidu.com/s?wd="+value_search); }
网站链接
http://www.francis2017.cn/lixiao相关文章推荐
- Django开发个人博客网站——2、通过virtualenv与virtualenvwrapper创建虚拟环境
- 创建个人网站(一) 如何申请一个网站
- HelloHui-个人网站的创建与发布指南-(2)购买服务器
- 在GitHub上创建和托管个人网站(上)
- 利用Github和Jekll创建个人网站
- Python NLTK学习6(创建词性标注器)除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f
- 个人Internet网站创建过程详解
- 创建个人网站
- min的个人网站终于创建起来了
- Weebly-轻松创建个人网站
- 个人网站免费创建
- 利用github创建个人网站
- 老罗的个人网站创建备忘
- github创建可访问的静态网站,个人博客教程
- 域名申请-企业网站创建-后期维护,个人全程为您定制服务
- 无法创建个人网站问题
- 换电脑后怎么继续维护以前hexo+GitHub创建的个人网站
- WORDPRESS创建个人网站
- 我为什么创建个人网站chentingpc.me
- 个人Internet网站创建过程详解