用jQuery模拟select下拉框的简单示例代码

时间:2021-05-18

很多时候,美工会觉得默认的select下拉框很难看(特别是右侧的下拉箭头按钮),他们通常喜欢用一个自定义的图标来代替这个按钮。这样就只能用 js + div 来模拟了,倒腾了一番,用jQuery模拟了下,当然网上这种文章也不少,只是懒得去看找
复制代码 代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:///ajax/jQuery/jquery-1.6.min.js"></script>
<script type="text/javascript">

function showExpand(targetId, expandId, expand_class) {
//先关掉其它弹出的层
if (expand_class != undefined) {
$("." + expand_class).hide();
}

//判断是否为IE
var isIE = (! +[1, ]);

var expand = $("#" + expandId);
var target = $("#" + targetId);

var dx = 0;
if (isIE) {
dx = -2;
}
else {
dx = 0;
}
expand.get(0).style.left = target.get(0).getBoundingClientRect().left + dx + "px";
if (isIE) {
dx = 17;
}
else {
dx = 19;
}
expand.get(0).style.top = parseInt(target.get(0).getBoundingClientRect().top) + dx + "px";
expand.show();

//每个li点击时赋值
$("#" + expandId).find("li").each(function (i) {
$(this).show().click(function () {
target.val($(this).text().split(' ')[1]);
expand.hide();
})
})


}

function search(srcId, expandId) {
var expand = $("#" + expandId);
var src = $("#" + srcId);

var A = expand.find("a");
var v = src.val().toUpperCase();

A.each(function (i) {
if (v.length >= 2) {
if ($(this).text().toUpperCase().indexOf(v) == -1) {
$(this).parent().hide();
}
else {
$(this).parent().show();
}
}
if (v.length <= 0) {
$(this).parent().show();
}
})
src.val(v);
}


$().ready(function(){
$("#txt_city").keyup(function(){
search('txt_city','city_select1');
}).focus(function(){
showExpand('txt_city','city_select1','expand')
})

$("#txt_city2").keyup(function(){
search('txt_city2','city_select2');
}).focus(function(){
showExpand('txt_city2','city_select2','expand')
})
})

function fnTest(){
document.getElementById("txtTarget").value = document.getElementById("txtSrc").value;
}
</script>
</head>
<body>
<div class="page" style="text-align: center">
<input type="text" value="" id="txt_city" class="input_expand" /><a
href="#" onclick="showExpand('txt_city','city_select1','expand')">▼</a>
<div class="expand" id="city_select1">
<ul>
<li><a href="javascript:void(0)">SH 上海</a></li>
<li><a href="javascript:void(0)">BJ 北京</a></li>
<li><a href="javascript:void(0)">HZ 杭州</a></li>
<li><a href="javascript:void(0)">WH 武汉</a></li>
<li><a href="javascript:void(0)">NJ 南京</a></li>
<li><a href="javascript:void(0)">WX 无锡</a></li>
</ul>
</div>

<input type="text" value="" id="txt_city2" class="input_expand" /><a
href="#" onclick="showExpand('txt_city2','city_select2','expand')">▼</a>
<div class="expand" id="city_select2">
<ul>
<li><a href="javascript:void(0)">CN 中文</a></li>
<li><a href="javascript:void(0)">EN 英语</a></li>
<li><a href="javascript:void(0)">JP 日本</a></li>
<li><a href="javascript:void(0)">RA 俄语</a></li>
<li><a href="javascript:void(0)">FA 法语</a></li>
<li><a href="javascript:void(0)">00 其它</a></li>
</ul>
</div>

<br/>
<br/>
<input type="text" id="txtSrc" onkeyup="fnTest()" />
<br/>
<input type="text" id="txtTarget" />
</div>
</body>
</html>

无图无真相,真相在此:

不足之处:
1、按键盘上下键时,没有高亮的自动移动
2、键入文字自动过滤结果时,感觉相对原生的select有些不自然

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章