
<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head><style>
*{ padding:0; margin:0}
input,ul{ width:200px;}
ul{ border:1px solid #ccc; display:none}
li{ height:25px; line-height:25px;list-style:none;border-bottom:1px dashed #ddd}
li:hover, li.active{ background:#f0f0f0;}</style><body><div class="select-box">
<input type="text" placeholder="选择项目" class="input">
<ul class="xl-box">
<li>选项一</li>
<li>选项二</li>
<li>3333</li>
<li>4444</li>
</ul></div><div class="select-box">
<input type="text" placeholder="选择项目" class="input">
<ul class="xl-box">
<li>选项一</li>
<li>选项二</li>
<li>3333</li>
<li>4444</li>
</ul></div><div class="select-box3">
<input type="text" placeholder="选择项目" class="input">
<ul class="xl-box">
<li>选项一</li>
<li>选项二</li>
<li>3333</li>
<li>4444</li>
</ul></div><div class="select-box4">
<input type="text" placeholder="用百度搜索" class="input">
<ul class="xl-box">
<!--<li>选项一</li>
<li>选项二</li>
<li>3333</li>
<li>4444</li>-->
</ul></div><script src="js/jquery.js"></script></body></html>第一部分: 以上为多种效果基础html代码布局,简单略过,重点在下面。
第二部分:js代码,以及简单解释
js面向对象从
1.基础的下拉到;
2.键盘方向键进行选取;
3.再到百度热词ajax下拉
一下三种方式可单一摘取出来进行使用,此组件还算完整。
由于时间有限没有做站内搜索结果展示页,
有时间再更新....
<script> /**
*@file 输入框获取焦点显示下拉框
*@author Zhou
*@time 2016/10/27 */
function Selectfn (o, options) { this.defaults = {
input: '.input', // 输入框
ul: '.xl-box' // 下拉框 }; this.opts = $.extend({}, this.defaults, options); this.obj = o; this.input = this.obj.find(this.opts.input); this.ul = this.obj.find(this.opts.ul); this.li = this.ul.find('li') this.init();
}
Selectfn.prototype = {
constructor: Selectfn,
init: function () { var _this = this; this.input.on('focus', function(){
_this.focusFn()
}); this.input.on('blur', function(){
_this.blurFn()
}); this.obj.on('click', 'li', function(){ var _this1 = $(this);
_this.selFn(_this1)
})
},
focusFn: function () { this.ul.slideDown()
},
blurFn: function () { this.ul.slideUp()
},
selFn: function (_this1) {
console.log(_this1.text()) this.input.val(_this1.text())
}
}
$('.select-box').each(function(){// 实例化
new Selectfn ($(this));
});
/**
*@file 继承Selectkey,实现方向键选择下拉列表
*@author Zhou
*@time 2016/10/27 */
function Selectkey(o, options) {
Selectfn.call(this, o, options); //继承属性 } for (i in Selectfn.prototype) {
Selectkey.prototype[i] = Selectfn.prototype[i]; //深拷贝方法 }
Selectkey.prototype.constructor = Selectkey; //改变constructor指向
Selectkey.prototype.focusFn = function () { var _this = this; this.i = -1; this.ul.slideDown();
$(document).on('keydown', function(e){ // 绑定键盘事件
if (e.keyCode == 38 || e.keyCode == 40) {
_this.keybordFn(e);
_this.selFn(_this.li.eq(_this.i))
}
})
}
Selectkey.prototype.blurFn = function () { this.ul.slideUp()
$(document).unbind('keydown'); // 解绑键盘事件 }
Selectkey.prototype.keybordFn = function (e) {// 方向键事件
var dir = e.keyCode; if (dir == 38) { this.i <= 0 ? this.i = this.li.length - 1 : this.i--;
} else if (dir == 40) { this.i >= this.li.length - 1 ? this.i = 0 : this.i++
} else {return} this.li.eq(this.i).addClass('active').siblings().removeClass('active');
}
new Selectkey ($('.select-box3'));// 实例化
/**
*@file 百度热词下拉实例
*@author Zhou
*@time 2016/10/27
*@ajaxUrl https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=js&cb=aa */
function Baidusearch (o, options) { var _this = this;
Selectkey.call(this, o, options); //继承属性
this.input.bind('keyup', function(e){ if (e.keyCode == 38 || e.keyCode == 40) return;
_this.keyupFn(e, $(this))
})
} for (i in Selectkey.prototype) {
Baidusearch.prototype[i] = Selectkey.prototype[i]; //深拷贝方法 }
Baidusearch.prototype.keyupFn = function (e, othis) { var oval = othis.val(); var _this = this;
$.ajax({
url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+oval+'&cb=success_callback',
dataType: "jsonp",
jsonpCallback: "success_callback",
success: function(data){ //console.log(data.s)
var html = ''; for(i in data.s){
html +='<li>' + data.s[i] + '</li>'
}
_this.ul.html(html);
_this.li = _this.ul.find('li')
}
})
}
new Baidusearch ($('.select-box4'));// 实例化
</script>
下面是实例效果:
只展示百度热词下拉效果:
