jQueryシミュレーション自動補完
9400 ワード
jQuery , 。
div , div 。ul 。
<div class="auto_div">
"text" class="auto_input" url-data="/json/nation.json"/>
<div class="auto_list_div">
class="auto_ul">
div>
div>
内部inputとdivはpositionで親divに対して位置を決定し、子divに高さとY軸スクロールバーを加えます.
<style type="text/css">
*{padding: 0;margin: 0;}
.auto_div{position: absolute;border:3px grey solid;width:auto;padding: 20px;height:auto;}
.auto_input{position: relative;}
.auto_list_div{position: relative;border:2px rgb(227,228,228) solid;width:auto;height: 300px; overflow-y: scroll;}
.auto_ul{padding: 5px;}
.auto_ul li{width: auto;list-style: none;}
.auto_ul li:hover{background-color: #eeeeee;font-weight: bold;}
style>
入力ボックスとサブdivにclick、keyup、mouseイベントをバインドする
$(".auto_div").mouseleave(function(){
$(".auto_list_div").hide();
});
getVal();
$(".auto_list_div").hide()
$(".auto_input").on("click keyup",function(event){
if(event.type="click"){
$(".auto_list_div").show();
}
if(event.type="keyup"){
var inval = $(".auto_input").val();
getVal(inval);
}
});
});
ajaxを利用してデータソースを動的に取得し、
function getVal(inval){
var url =$(".auto_input").attr("url-data");
$.ajax({
url:url,
type:'post',
dataType:'json',
success:function(data){
var nation = $("#hnation").val();
var str1 = "";
var str2 = "";
$.each(data,function(k,v){
if(null!=inval&&undefined!=inval&&""!=inval.trim()&&v.name.indexOf(inval)>=0){
str1+="+k+")' id="+v.ID+">"+v.name+" ";
}else{
str2+="+k+")' id="+v.ID+">"+v.name+" ";
}
});
if(null!=inval&&undefined!=inval&&""!=inval.trim()){
$(".auto_ul li").remove();
$(".auto_ul").append(str1);
}else{
$(".auto_ul li").remove();
$(".auto_ul").append(str2);
}
},
error:function(XMLHttpRequest, textStatus, errorThrown){
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
alert(" !");
}
});
}
結果をinputにコピーします.
function getComVal(k){
var val = $("#"+k).text();
$(".auto_input").val(val);
$(".auto_list_div").hide();
}