inputSelect.min.js 8.9 KB

1
  1. +function(a){a.expr[":"].searchSelectContains=a.expr.createPseudo(function(b){return function(c){if(a(c).children("a").attr("data-simplified")!==undefined){return a(c).text().toUpperCase().indexOf(b.toUpperCase())>=0||a(c).children("a").attr("data-simplified").toUpperCase().indexOf(b.toUpperCase())>=0}else{return a(c).text().toUpperCase().indexOf(b.toUpperCase())>=0}}});a.fn.inputSelect=function(i,u,h,s){var e={defaultText:"-请选择-",isInputEnabled:false,onInputBlur:null,jsonData:null,initialValue:null,jsonDataId:null,jsonDataText:null,jsonSimplifiedKey:null,ajax:{url:null,data:null,dataType:null,resultKey:null,type:null,beforeSend:null,error:null,success:null,complete:null},itemVisible:5};if(this.length==0){return this}if(this.length>1){this.each(function(){a(this).inputSelect(i,u,h,s)});return this}var l=this,m=l.find(".cus-sel-chosed").find("input"),t=l.find(".cus-sel-chosed").find(".cus-sel-chosed-txt"),r=u,c={},b={},p={},q=a.extend({},e,i),w="";l.attr({"data-defaulttext":q.defaultText});l.find(".cus-sel-list").height(37*q.itemVisible);function g(B){if(l.find('a[data-value="'+B.key+'"]').length<=0){return false}f(B.key,B.val);l.find(".cus-sel-list").find("a").removeClass("hover");l.find(".cus-sel-list").find('a[data-value="'+B.key+'"]').addClass("hover")}function o(B){return Object.prototype.toString.call(B)==="[object String]"}function z(B){if(typeof Array.isArray==="function"){return Array.isArray(B)}else{return Object.prototype.toString.call(B)==="[object Array]"}}function d(B){return Object.prototype.toString.call(B)==="[object Function]"}function A(H,C,G,F){var E,I,B="";if(z(H)){for(E=0,I=H.length;E<I;E++){if(C&&G){if(F){if(H[E][C]===""||H[E][C]<=0){B='<li><a href="javascript:;" title="'+H[E][G]+'" data-value="'+H[E][C]+'" data-simplified="'+H[E][F]+'">'+H[E][G]+"</a></li>"+B}else{B+='<li><a href="javascript:;" title="'+H[E][G]+'" data-value="'+H[E][C]+'" data-simplified="'+H[E][F]+'">'+H[E][G]+"</a></li>"}}else{if(H[E][C]===""||H[E][C]<=0){B='<li><a href="javascript:;" title="'+H[E][G]+'" data-value="'+H[E][C]+'">'+H[E][G]+"</a></li>"+B}else{B+='<li><a href="javascript:;" title="'+H[E][G]+'" data-value="'+H[E][C]+'">'+H[E][G]+"</a></li>"}}}else{for(var D in H[E]){if(D===""||D<=0){B='<li><a href="javascript:;" title="'+H[E][D]+'" data-value="'+D+'">'+H[E][D]+"</a></li>"+B}else{B+='<li><a href="javascript:;" title="'+H[E][D]+'" data-value="'+D+'">'+H[E][D]+"</a></li>"}}}}}return B}function x(B,D){var F,C;if(B){if(B.key==undefined&&B.val==undefined){for(var E in B){F=E,C=B[E];f(F,C);l.find(".cus-sel-list").find('a[data-value="'+F+'"]').addClass("hover")}}else{if(B.key!=undefined&&B.val!=undefined){F=B.key,C=B.val;f(F,C);l.find(".cus-sel-list").find('a[data-value="'+F+'"]').addClass("hover")}else{if(B.key!=undefined){F=B.key;C=l.find(".cus-sel-list").find('a[data-value="'+F+'"]').addClass("hover").text();f(F,C)}else{if(B.val!=undefined){C=B.val;F=l.find(".cus-sel-list").find('a[title="'+C+'"]').addClass("hover").attr("data-value");f(F,C)}}}}if(h){h(l,C,F)}}else{f("",l.attr("data-defaulttext"))}}function j(C,B){if(C.outerHeight()+C.position().top>B.height()){B.scrollTop(B.scrollTop()+C.outerHeight()+C.position().top-B.height())}else{if(C.position().top<0){B.scrollTop(B.scrollTop()+C.position().top)}}}function n(F,E){if(F){F.addClass("active").css({zIndex:1000});var D=document.documentElement.scrollTop+document.body.scrollTop,C=F.offset().top,H=a(window).height(),B=F.children(".cus-sel-list").outerHeight(true),G=F.outerHeight(true);if(-(C+G-D-H)<B){F.children(".cus-sel-list").show().css({top:-(B)+"px"})}else{F.children(".cus-sel-list").show().css({top:G+"px"})}if(E&&d(E)){E(F)}}}function v(){l.find(".cus-sel-list").hide();l.css({zIndex:1})}function k(C,E){var B,D;if(C){D=C.text(),B=C.attr("data-value");l.attr("value",B).removeClass("active").find(".cus-sel-list").find("a").removeClass("hover");C.addClass("hover");f(B,D);if(E){E(l,D,B)}}}function y(B){l.children(".cus-sel-list").find(".hover").removeClass("hover");l.attr("value","").children(".cus-sel-chosed").find(".cus-sel-chosed-txt").text("").attr("data-value","").end().find("input").attr("data-value","");var B=a.trim(B);if(B){l.children(".cus-sel-list").find("li").show().end().find("li:not(:searchSelectContains("+B+"))").hide();return l.children(".cus-sel-list").find("li:searchSelectContains("+B+")")}else{l.children(".cus-sel-list").find("li").show();return l.children(".cus-sel-list").find("li")}}function f(B,C){l.attr("value",B);m.val(C).attr("data-value",B);t.text(C).attr("data-value",B)}if(q.isInputEnabled){if(l.data("bind")){m.off(".cusSel")}else{l.data("bind",true)}t.hide();f("",l.attr("data-defaulttext"));m.addClass("cus-sel-chosed-input").on("keydown.cusSel",function(D){D.stopPropagation();var C=l.children(".cus-sel-list").find("li:visible"),E=l.children(".cus-sel-list").find(".hover").eq(0),B=C.index(E.parent());if(D.which===13){D.preventDefault();if(E){k(E,h)}else{f("",l.attr("data-defaulttext"))}v()}else{if(D.which==27){}else{if(D.which==40){D.preventDefault();if(C.length>0){if(E.parent().is(":visible")){if(C.length>1){E.removeClass("hover");if(B!=C.length-1){E=C.eq(B+1).find("a").addClass("hover")}else{E=C.first().find("a").addClass("hover")}}}else{E.removeClass("hover");E=C.eq(0).find("a").addClass("hover")}j(E,l.children(".cus-sel-list"))}}else{if(D.which==38){D.preventDefault();if(C.length>0){if(E.parent().is(":visible")){if(C.length>1){E.removeClass("hover");if(B!=0){E=C.eq(B-1).find("a").addClass("hover")}else{E=C.last().find("a").addClass("hover")}}}else{E.removeClass("hover");E=C.eq(0).find("a").addClass("hover")}j(E,l.children(".cus-sel-list"))}}}}}}).on("keyup.cusSel",function(C){if(C.which!=13&&C.which!=27&&C.which!=38&&C.which!=40){var B=y(a(this).val());if(B.length){n(l,u)}else{v()}l.find(".cus-sel-chosed-txt").text(a(this).val()).attr("data-value",a(this).attr("data-value"))}}).on("focus.cusSel",function(){if(a.trim(a(this).val())===l.attr("data-defaulttext")){a(this).val("")}}).on("blur.cusSel",function(){setTimeout(function(){if(a.trim(m.val())===""){m.val(l.attr("data-defaulttext"))}if(q.onInputBlur){q.onInputBlur()}},100)})}if(o(i)){switch(i){case"setDatas":g(r);break;case"setDataKey":c.key=r;c.val=a.trim(l.find(".cus-sel-list").find('a[data-value="'+r+'"]').text());g(c);break;case"setDataVal":b.val=r;l.find(".cus-sel-list").find("a").each(function(){if(a.trim(a(this).text())==r){b.key=a(this).data("value")}});g(b);break;case"getDatas":p.key=t.attr("data-value");p.val=a.trim(t.text())===l.attr("data-defaulttext")?"":a.trim(t.text());return p;break;case"getDataKey":return t.attr("data-value");break;case"getDataVal":return a.trim(t.text())===l.attr("data-defaulttext")?"":a.trim(t.text());break;case"resetValue":f("",l.attr("data-defaulttext"));l.find(".cus-sel-list").find("a.hover").removeClass("hover");break;case"clearValue":f("",l.attr("data-defaulttext"));l.find(".cus-sel-list").find("ul").html("");break}return false}if(q.ajax.url){a.ajax({url:q.ajax.url,data:q.ajax.data,dataType:q.ajax.datatype?q.ajax.datatype:"json",type:q.ajax.type?q.ajax.type:"get",beforeSend:function(B){if(q.ajax.beforeSend){q.ajax.beforeSend.call(l,{XHR:B})}else{return}},error:function(D,B,C){if(q.ajax.error){q.ajax.error.call(l,{XHR:D,textStatus:B,errorThrown:C})}else{return}},complete:function(C,B){if(q.ajax.complete){q.ajax.complete.call(l,{XHR:C,textStatus:B})}else{return}},success:function(F,B){var D=F,C=q.ajax.resultKey,E;if(q.ajax.success){q.ajax.success.call(l,{response:F,textStatus:B})}else{if(C){E=A(D[C],q.jsonDataId,q.jsonDataText,q.jsonSimplifiedKey);l.children(".cus-sel-list").children("ul").html(E);x(q.initialValue,D[C])}else{alert("使用ajax加载数据需配置resultKey(json数组对应的key)")}}}})}if(q.jsonData){w=A(q.jsonData,q.jsonDataId,q.jsonDataText,q.jsonSimplifiedKey);l.children(".cus-sel-list").children("ul").html(w);x(q.initialValue,q.jsonData)}if(l.data("bind")){l.off("click.cusSel",".cus-sel-chosed").children(".cus-sel-list").off("click.cusSel","a")}else{l.data("bind",true)}l.on("click.cusSel",".cus-sel-chosed",function(B){if(l.is(".disabled")||l.is(".active")){return false}a(".cus-sel").removeClass("active").css({zIndex:1});a(".cus-sel-list").hide();var C=a(this);if(q.isInputEnabled){if(a(B.target).is(".cus-sel-chosed-input")){return false}else{if(a(B.target).is(".jselect-icon")){n(l,u);m.focus()}}}else{n(l,u)}});l.children(".cus-sel-list").on("click.cusSel","a",function(){var B=a(this);k(B,h);v();return false});if(s){setTimeout(function(){s()},300)}l.optionsData=function(B,C){if(B){w=A(B,q.jsonDataId,q.jsonDataText,q.jsonSimplifiedKey);l.children(".cus-sel-list").children("ul").html(w);f("",l.attr("data-defaulttext"))}if(C){C(l)}};return this};a("html,body").click(function(c){var b=c.target;if(a(b).parents(".cus-sel").length==0){a(".cus-sel").removeClass("active").css({zIndex:1});a(".cus-sel-list").hide()}});a(document).on("mouseenter",'[data-toggle="inputSelect"]',function(b){if(a(this).data("mouseenter")){return false}a(this).data("mouseenter",true);a(this).inputSelect({isInputEnabled:true})})}(jQuery);