我发现某些网站用户体验贼不好:填写信息,需要在选择框中下拉选择内容,关键的是选择框中选择项~贼~多!而且字体又小!
弄个效果图比如:
拉了半天也没找到我想要选择的内容,好不容易找到了,点击(手机上操作)...不小心选了下面一行的内容.....还要再次从新下拉再找...
正好最近做项目遇到一个类似的功能,使用js做了个优化:
思路:使用输入框代替选择框,当输入框获取焦点后,选择框显示。在输入框中输入内容,选择框自动模糊查询将含有关键字的可选项自动筛选出来,然后用户再去点击选择框。
这样相当于实现了在可选择项中,增加了查询的功能。
示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title></title>
<meta name="Keywords" content="关键词">
<meta name="description" content="描述">
</head>
<body>
<input type="text" name="makeupCo" id="makeupCo" class="makeinp" onfocus="setfocus(this)" oninput="setinput(this)" placeholder="请输入...">
<select id="udr_user_id" name="udr_user_id" onchange="changeF(this)" style="display: none;">
<option value="">--请选择--</option>
<option value="1">产品1</option>
<option value="2">产品2</option>
<option value="3">产品3</option>
<option value="4">产品4</option>
<option value="5">产品5</option>
<option value="6">产品6</option>
<option value="7">产品7</option>
<option value="8">产品8</option>
<option value="9">优惠产品1</option>
<option value="10">优惠产品2</option>
<option value="11">优惠产品3</option>
</select>
</body>
<script type="text/javascript" src="http://mat1.gtimg.com/libs/jquery/1.12.0/jquery.js"></script>
<script type="text/javascript">
var TempArr = [];
var IdsArr = [];
$(function() {
$("#udr_user_id option").each(function(index,el){
TempArr[index] = $(this).text();
IdsArr[index] = $(this).val();
});
$(document).bind("click",function(e){
var e = e || window.event;
var elem = e.target || e.srcElement;
while(elem){
if (elem.id && (elem.id == "udr_user_id" || elem.id == "makeupCo")) {
return;
}
elem = elem.parentNode;
}
$("#udr_user_id").css("display","none");
});
})
$("#makeupCo").blur(function(){
$("#makeupCo").val($("#udr_user_id").find("option:selected").text());
})
function changeF(this_){
$(this_).prev("input").val($(this_).find("option:selected").text());
$("#udr_user_id").css({"display":"none"});
}
function setfocus(this_){
$("#udr_user_id").css({"display":"","width":"100px"});
}
function setinput(this_){
var select = $("#udr_user_id");
select.html("");
for (i = 0; i < TempArr.length; i++) {
if (TempArr[i].indexOf(this_.value)>=0) {
var option = $("<option value="+IdsArr[i]+"></option>").text(TempArr[i]);
select.append(option);
}
}
}
</script>