Files
jshERP/erp_web/js/easyui-1.3.5/plugins/jquery.combo.js
2018-12-19 23:51:59 +08:00

454 lines
11 KiB
JavaScript

/**
* jQuery EasyUI 1.3.5
*
* Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
*
* Licensed under the GPL or commercial licenses
* To use it on other terms please contact us: info@jeasyui.com
* http://www.gnu.org/licenses/gpl.txt
* http://www.jeasyui.com/license_commercial.php
*
*/
(function($){
function _1(_2,_3){
var _4=$.data(_2,"combo");
var _5=_4.options;
var _6=_4.combo;
var _7=_4.panel;
if(_3){
_5.width=_3;
}
if(isNaN(_5.width)){
var c=$(_2).clone();
c.css("visibility","hidden");
c.appendTo("body");
_5.width=c.outerWidth();
c.remove();
}
_6.appendTo("body");
var _8=_6.find("input.combo-text");
var _9=_6.find(".combo-arrow");
var _a=_5.hasDownArrow?_9._outerWidth():0;
_6._outerWidth(_5.width)._outerHeight(_5.height);
_8._outerWidth(_6.width()-_a);
_8.css({height:_6.height()+"px",lineHeight:_6.height()+"px"});
_9._outerHeight(_6.height());
_7.panel("resize",{width:(_5.panelWidth?_5.panelWidth:_6.outerWidth()),height:_5.panelHeight});
_6.insertAfter(_2);
};
function _b(_c){
$(_c).addClass("combo-f").hide();
var _d=$("<span class=\"combo\">"+"<input type=\"text\" class=\"combo-text\" autocomplete=\"off\">"+"<span><span class=\"combo-arrow\"></span></span>"+"<input type=\"hidden\" class=\"combo-value\">"+"</span>").insertAfter(_c);
var _e=$("<div class=\"combo-panel\"></div>").appendTo("body");
_e.panel({doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){
$(this).panel("resize");
},onClose:function(){
var _f=$.data(_c,"combo");
if(_f){
_f.options.onHidePanel.call(_c);
}
}});
var _10=$(_c).attr("name");
if(_10){
_d.find("input.combo-value").attr("name",_10);
$(_c).removeAttr("name").attr("comboName",_10);
}
return {combo:_d,panel:_e};
};
function _11(_12){
var _13=$.data(_12,"combo");
var _14=_13.options;
var _15=_13.combo;
if(_14.hasDownArrow){
_15.find(".combo-arrow").show();
}else{
_15.find(".combo-arrow").hide();
}
_16(_12,_14.disabled);
_17(_12,_14.readonly);
};
function _18(_19){
var _1a=$.data(_19,"combo");
var _1b=_1a.combo.find("input.combo-text");
_1b.validatebox("destroy");
_1a.panel.panel("destroy");
_1a.combo.remove();
$(_19).remove();
};
function _1c(_1d){
$(_1d).find(".combo-f").each(function(){
var p=$(this).combo("panel");
if(p.is(":visible")){
p.panel("close");
}
});
};
function _1e(_1f){
var _20=$.data(_1f,"combo");
var _21=_20.options;
var _22=_20.panel;
var _23=_20.combo;
var _24=_23.find(".combo-text");
var _25=_23.find(".combo-arrow");
$(document).unbind(".combo").bind("mousedown.combo",function(e){
var p=$(e.target).closest("span.combo,div.combo-p");
if(p.length){
_1c(p);
return;
}
$("body>div.combo-p>div.combo-panel:visible").panel("close");
});
_24.unbind(".combo");
_25.unbind(".combo");
if(!_21.disabled&&!_21.readonly){
_24.bind("click.combo",function(e){
if(!_21.editable){
_26.call(this);
}else{
var p=$(this).closest("div.combo-panel");
$("div.combo-panel:visible").not(_22).not(p).panel("close");
}
}).bind("keydown.combo",function(e){
switch(e.keyCode){
case 38:
_21.keyHandler.up.call(_1f,e);
break;
case 40:
_21.keyHandler.down.call(_1f,e);
break;
case 37:
_21.keyHandler.left.call(_1f,e);
break;
case 39:
_21.keyHandler.right.call(_1f,e);
break;
case 13:
e.preventDefault();
_21.keyHandler.enter.call(_1f,e);
return false;
case 9:
case 27:
_27(_1f);
break;
default:
if(_21.editable){
if(_20.timer){
clearTimeout(_20.timer);
}
_20.timer=setTimeout(function(){
var q=_24.val();
if(_20.previousValue!=q){
_20.previousValue=q;
$(_1f).combo("showPanel");
_21.keyHandler.query.call(_1f,_24.val(),e);
$(_1f).combo("validate");
}
},_21.delay);
}
}
});
_25.bind("click.combo",function(){
_26.call(this);
}).bind("mouseenter.combo",function(){
$(this).addClass("combo-arrow-hover");
}).bind("mouseleave.combo",function(){
$(this).removeClass("combo-arrow-hover");
});
}
function _26(){
if(_22.is(":visible")){
_1c(_22);
_27(_1f);
}else{
var p=$(this).closest("div.combo-panel");
$("div.combo-panel:visible").not(_22).not(p).panel("close");
$(_1f).combo("showPanel");
}
_24.focus();
};
};
function _28(_29){
var _2a=$.data(_29,"combo").options;
var _2b=$.data(_29,"combo").combo;
var _2c=$.data(_29,"combo").panel;
if($.fn.window){
_2c.panel("panel").css("z-index",$.fn.window.defaults.zIndex++);
}
_2c.panel("move",{left:_2b.offset().left,top:_2d()});
if(_2c.panel("options").closed){
_2c.panel("open");
_2a.onShowPanel.call(_29);
}
(function(){
if(_2c.is(":visible")){
_2c.panel("move",{left:_2e(),top:_2d()});
setTimeout(arguments.callee,200);
}
})();
function _2e(){
var _2f=_2b.offset().left;
if(_2f+_2c._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){
_2f=$(window)._outerWidth()+$(document).scrollLeft()-_2c._outerWidth();
}
if(_2f<0){
_2f=0;
}
return _2f;
};
function _2d(){
var top=_2b.offset().top+_2b._outerHeight();
if(top+_2c._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
top=_2b.offset().top-_2c._outerHeight();
}
if(top<$(document).scrollTop()){
top=_2b.offset().top+_2b._outerHeight();
}
return top;
};
};
function _27(_30){
var _31=$.data(_30,"combo").panel;
_31.panel("close");
};
function _32(_33){
var _34=$.data(_33,"combo").options;
var _35=$(_33).combo("textbox");
_35.validatebox($.extend({},_34,{deltaX:(_34.hasDownArrow?_34.deltaX:(_34.deltaX>0?1:-1))}));
};
function _16(_36,_37){
var _38=$.data(_36,"combo");
var _39=_38.options;
var _3a=_38.combo;
if(_37){
_39.disabled=true;
$(_36).attr("disabled",true);
_3a.find(".combo-value").attr("disabled",true);
_3a.find(".combo-text").attr("disabled",true);
}else{
_39.disabled=false;
$(_36).removeAttr("disabled");
_3a.find(".combo-value").removeAttr("disabled");
_3a.find(".combo-text").removeAttr("disabled");
}
};
function _17(_3b,_3c){
var _3d=$.data(_3b,"combo");
var _3e=_3d.options;
_3e.readonly=_3c==undefined?true:_3c;
var _3f=_3e.readonly?true:(!_3e.editable);
_3d.combo.find(".combo-text").attr("readonly",_3f).css("cursor",_3f?"pointer":"");
};
function _40(_41){
var _42=$.data(_41,"combo");
var _43=_42.options;
var _44=_42.combo;
if(_43.multiple){
_44.find("input.combo-value").remove();
}else{
_44.find("input.combo-value").val("");
}
_44.find("input.combo-text").val("");
};
function _45(_46){
var _47=$.data(_46,"combo").combo;
return _47.find("input.combo-text").val();
};
function _48(_49,_4a){
var _4b=$.data(_49,"combo");
var _4c=_4b.combo.find("input.combo-text");
if(_4c.val()!=_4a){
_4c.val(_4a);
$(_49).combo("validate");
_4b.previousValue=_4a;
}
};
function _4d(_4e){
var _4f=[];
var _50=$.data(_4e,"combo").combo;
_50.find("input.combo-value").each(function(){
_4f.push($(this).val());
});
return _4f;
};
function _51(_52,_53){
var _54=$.data(_52,"combo").options;
var _55=_4d(_52);
var _56=$.data(_52,"combo").combo;
_56.find("input.combo-value").remove();
var _57=$(_52).attr("comboName");
for(var i=0;i<_53.length;i++){
var _58=$("<input type=\"hidden\" class=\"combo-value\">").appendTo(_56);
if(_57){
_58.attr("name",_57);
}
_58.val(_53[i]);
}
var tmp=[];
for(var i=0;i<_55.length;i++){
tmp[i]=_55[i];
}
var aa=[];
for(var i=0;i<_53.length;i++){
for(var j=0;j<tmp.length;j++){
if(_53[i]==tmp[j]){
aa.push(_53[i]);
tmp.splice(j,1);
break;
}
}
}
if(aa.length!=_53.length||_53.length!=_55.length){
if(_54.multiple){
_54.onChange.call(_52,_53,_55);
}else{
_54.onChange.call(_52,_53[0],_55[0]);
}
}
};
function _59(_5a){
var _5b=_4d(_5a);
return _5b[0];
};
function _5c(_5d,_5e){
_51(_5d,[_5e]);
};
function _5f(_60){
var _61=$.data(_60,"combo").options;
var fn=_61.onChange;
_61.onChange=function(){
};
if(_61.multiple){
if(_61.value){
if(typeof _61.value=="object"){
_51(_60,_61.value);
}else{
_5c(_60,_61.value);
}
}else{
_51(_60,[]);
}
_61.originalValue=_4d(_60);
}else{
_5c(_60,_61.value);
_61.originalValue=_61.value;
}
_61.onChange=fn;
};
$.fn.combo=function(_62,_63){
if(typeof _62=="string"){
var _64=$.fn.combo.methods[_62];
if(_64){
return _64(this,_63);
}else{
return this.each(function(){
var _65=$(this).combo("textbox");
_65.validatebox(_62,_63);
});
}
}
_62=_62||{};
return this.each(function(){
var _66=$.data(this,"combo");
if(_66){
$.extend(_66.options,_62);
}else{
var r=_b(this);
_66=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_62),combo:r.combo,panel:r.panel,previousValue:null});
$(this).removeAttr("disabled");
}
_11(this);
_1(this);
_1e(this);
_32(this);
_5f(this);
});
};
$.fn.combo.methods={options:function(jq){
return $.data(jq[0],"combo").options;
},panel:function(jq){
return $.data(jq[0],"combo").panel;
},textbox:function(jq){
return $.data(jq[0],"combo").combo.find("input.combo-text");
},destroy:function(jq){
return jq.each(function(){
_18(this);
});
},resize:function(jq,_67){
return jq.each(function(){
_1(this,_67);
});
},showPanel:function(jq){
return jq.each(function(){
_28(this);
});
},hidePanel:function(jq){
return jq.each(function(){
_27(this);
});
},disable:function(jq){
return jq.each(function(){
_16(this,true);
_1e(this);
});
},enable:function(jq){
return jq.each(function(){
_16(this,false);
_1e(this);
});
},readonly:function(jq,_68){
return jq.each(function(){
_17(this,_68);
_1e(this);
});
},isValid:function(jq){
var _69=$.data(jq[0],"combo").combo.find("input.combo-text");
return _69.validatebox("isValid");
},clear:function(jq){
return jq.each(function(){
_40(this);
});
},reset:function(jq){
return jq.each(function(){
var _6a=$.data(this,"combo").options;
if(_6a.multiple){
$(this).combo("setValues",_6a.originalValue);
}else{
$(this).combo("setValue",_6a.originalValue);
}
});
},getText:function(jq){
return _45(jq[0]);
},setText:function(jq,_6b){
return jq.each(function(){
_48(this,_6b);
});
},getValues:function(jq){
return _4d(jq[0]);
},setValues:function(jq,_6c){
return jq.each(function(){
_51(this,_6c);
});
},getValue:function(jq){
return _59(jq[0]);
},setValue:function(jq,_6d){
return jq.each(function(){
_5c(this,_6d);
});
}};
$.fn.combo.parseOptions=function(_6e){
var t=$(_6e);
return $.extend({},$.fn.validatebox.parseOptions(_6e),$.parser.parseOptions(_6e,["width","height","separator",{panelWidth:"number",editable:"boolean",hasDownArrow:"boolean",delay:"number",selectOnNavigation:"boolean"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined),value:(t.val()||undefined)});
};
$.fn.combo.defaults=$.extend({},$.fn.validatebox.defaults,{width:"auto",height:22,panelWidth:null,panelHeight:200,multiple:false,selectOnNavigation:true,separator:",",editable:true,disabled:false,readonly:false,hasDownArrow:true,value:"",delay:200,deltaX:19,keyHandler:{up:function(e){
},down:function(e){
},left:function(e){
},right:function(e){
},enter:function(e){
},query:function(q,e){
}},onShowPanel:function(){
},onHidePanel:function(){
},onChange:function(_6f,_70){
}});
})(jQuery);