jquery.combo.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /**
  2. * jQuery EasyUI 1.5.2
  3. *
  4. * Copyright (c) 2009-2017 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. *
  9. */
  10. (function($){
  11. $(function(){
  12. $(document).unbind(".combo").bind("mousedown.combo mousewheel.combo",function(e){
  13. var p=$(e.target).closest("span.combo,div.combo-p,div.menu");
  14. if(p.length){
  15. _1(p);
  16. return;
  17. }
  18. $("body>div.combo-p>div.combo-panel:visible").panel("close");
  19. });
  20. });
  21. function _2(_3){
  22. var _4=$.data(_3,"combo");
  23. var _5=_4.options;
  24. if(!_4.panel){
  25. _4.panel=$("<div class=\"combo-panel\"></div>").appendTo("body");
  26. _4.panel.panel({minWidth:_5.panelMinWidth,maxWidth:_5.panelMaxWidth,minHeight:_5.panelMinHeight,maxHeight:_5.panelMaxHeight,doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){
  27. var _6=$(this).panel("options").comboTarget;
  28. var _7=$.data(_6,"combo");
  29. if(_7){
  30. _7.options.onShowPanel.call(_6);
  31. }
  32. },onBeforeClose:function(){
  33. _1($(this).parent());
  34. },onClose:function(){
  35. var _8=$(this).panel("options").comboTarget;
  36. var _9=$(_8).data("combo");
  37. if(_9){
  38. _9.options.onHidePanel.call(_8);
  39. }
  40. }});
  41. }
  42. var _a=$.extend(true,[],_5.icons);
  43. if(_5.hasDownArrow){
  44. _a.push({iconCls:"combo-arrow",handler:function(e){
  45. _f(e.data.target);
  46. }});
  47. }
  48. $(_3).addClass("combo-f").textbox($.extend({},_5,{icons:_a,onChange:function(){
  49. }}));
  50. $(_3).attr("comboName",$(_3).attr("textboxName"));
  51. _4.combo=$(_3).next();
  52. _4.combo.addClass("combo");
  53. };
  54. function _b(_c){
  55. var _d=$.data(_c,"combo");
  56. var _e=_d.options;
  57. var p=_d.panel;
  58. if(p.is(":visible")){
  59. p.panel("close");
  60. }
  61. if(!_e.cloned){
  62. p.panel("destroy");
  63. }
  64. $(_c).textbox("destroy");
  65. };
  66. function _f(_10){
  67. var _11=$.data(_10,"combo").panel;
  68. if(_11.is(":visible")){
  69. var _12=_11.combo("combo");
  70. _13(_12);
  71. if(_12!=_10){
  72. $(_10).combo("showPanel");
  73. }
  74. }else{
  75. var p=$(_10).closest("div.combo-p").children(".combo-panel");
  76. $("div.combo-panel:visible").not(_11).not(p).panel("close");
  77. $(_10).combo("showPanel");
  78. }
  79. $(_10).combo("textbox").focus();
  80. };
  81. function _1(_14){
  82. $(_14).find(".combo-f").each(function(){
  83. var p=$(this).combo("panel");
  84. if(p.is(":visible")){
  85. p.panel("close");
  86. }
  87. });
  88. };
  89. function _15(e){
  90. var _16=e.data.target;
  91. var _17=$.data(_16,"combo");
  92. var _18=_17.options;
  93. if(!_18.editable){
  94. _f(_16);
  95. }else{
  96. var p=$(_16).closest("div.combo-p").children(".combo-panel");
  97. $("div.combo-panel:visible").not(p).each(function(){
  98. var _19=$(this).combo("combo");
  99. if(_19!=_16){
  100. _13(_19);
  101. }
  102. });
  103. }
  104. };
  105. function _1a(e){
  106. var _1b=e.data.target;
  107. var t=$(_1b);
  108. var _1c=t.data("combo");
  109. var _1d=t.combo("options");
  110. _1c.panel.panel("options").comboTarget=_1b;
  111. switch(e.keyCode){
  112. case 38:
  113. _1d.keyHandler.up.call(_1b,e);
  114. break;
  115. case 40:
  116. _1d.keyHandler.down.call(_1b,e);
  117. break;
  118. case 37:
  119. _1d.keyHandler.left.call(_1b,e);
  120. break;
  121. case 39:
  122. _1d.keyHandler.right.call(_1b,e);
  123. break;
  124. case 13:
  125. e.preventDefault();
  126. _1d.keyHandler.enter.call(_1b,e);
  127. return false;
  128. case 9:
  129. case 27:
  130. _13(_1b);
  131. break;
  132. default:
  133. if(_1d.editable){
  134. if(_1c.timer){
  135. clearTimeout(_1c.timer);
  136. }
  137. _1c.timer=setTimeout(function(){
  138. var q=t.combo("getText");
  139. if(_1c.previousText!=q){
  140. _1c.previousText=q;
  141. t.combo("showPanel");
  142. _1d.keyHandler.query.call(_1b,q,e);
  143. t.combo("validate");
  144. }
  145. },_1d.delay);
  146. }
  147. }
  148. };
  149. function _1e(_1f){
  150. var _20=$.data(_1f,"combo");
  151. var _21=_20.combo;
  152. var _22=_20.panel;
  153. var _23=$(_1f).combo("options");
  154. var _24=_22.panel("options");
  155. _24.comboTarget=_1f;
  156. if(_24.closed){
  157. _22.panel("panel").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999});
  158. _22.panel("resize",{width:(_23.panelWidth?_23.panelWidth:_21._outerWidth()),height:_23.panelHeight});
  159. _22.panel("panel").hide();
  160. _22.panel("open");
  161. }
  162. (function(){
  163. if(_24.comboTarget==_1f&&_22.is(":visible")){
  164. _22.panel("move",{left:_25(),top:_26()});
  165. setTimeout(arguments.callee,200);
  166. }
  167. })();
  168. function _25(){
  169. var _27=_21.offset().left;
  170. if(_23.panelAlign=="right"){
  171. _27+=_21._outerWidth()-_22._outerWidth();
  172. }
  173. if(_27+_22._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){
  174. _27=$(window)._outerWidth()+$(document).scrollLeft()-_22._outerWidth();
  175. }
  176. if(_27<0){
  177. _27=0;
  178. }
  179. return _27;
  180. };
  181. function _26(){
  182. var top=_21.offset().top+_21._outerHeight();
  183. if(top+_22._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
  184. top=_21.offset().top-_22._outerHeight();
  185. }
  186. if(top<$(document).scrollTop()){
  187. top=_21.offset().top+_21._outerHeight();
  188. }
  189. return top;
  190. };
  191. };
  192. function _13(_28){
  193. var _29=$.data(_28,"combo").panel;
  194. _29.panel("close");
  195. };
  196. function _2a(_2b,_2c){
  197. var _2d=$.data(_2b,"combo");
  198. var _2e=$(_2b).textbox("getText");
  199. if(_2e!=_2c){
  200. $(_2b).textbox("setText",_2c);
  201. }
  202. _2d.previousText=_2c;
  203. };
  204. function _2f(_30){
  205. var _31=$.data(_30,"combo");
  206. var _32=_31.options;
  207. var _33=$(_30).next();
  208. var _34=[];
  209. _33.find(".textbox-value").each(function(){
  210. _34.push($(this).val());
  211. });
  212. if(_32.multivalue){
  213. return _34;
  214. }else{
  215. return _34.length?_34[0].split(_32.separator):_34;
  216. }
  217. };
  218. function _35(_36,_37){
  219. var _38=$.data(_36,"combo");
  220. var _39=_38.combo;
  221. var _3a=$(_36).combo("options");
  222. if(!$.isArray(_37)){
  223. _37=_37.split(_3a.separator);
  224. }
  225. var _3b=_2f(_36);
  226. _39.find(".textbox-value").remove();
  227. if(_37.length){
  228. if(_3a.multivalue){
  229. for(var i=0;i<_37.length;i++){
  230. _3c(_37[i]);
  231. }
  232. }else{
  233. _3c(_37.join(_3a.separator));
  234. }
  235. }
  236. function _3c(_3d){
  237. var _3e=$(_36).attr("textboxName")||"";
  238. var _3f=$("<input type=\"hidden\" class=\"textbox-value\">").appendTo(_39);
  239. _3f.attr("name",_3e);
  240. if(_3a.disabled){
  241. _3f.attr("disabled","disabled");
  242. }
  243. _3f.val(_3d);
  244. };
  245. var _40=(function(){
  246. if(_3b.length!=_37.length){
  247. return true;
  248. }
  249. for(var i=0;i<_37.length;i++){
  250. if(_37[i]!=_3b[i]){
  251. return true;
  252. }
  253. }
  254. return false;
  255. })();
  256. if(_40){
  257. $(_36).val(_37.join(_3a.separator));
  258. if(_3a.multiple){
  259. _3a.onChange.call(_36,_37,_3b);
  260. }else{
  261. _3a.onChange.call(_36,_37[0],_3b[0]);
  262. }
  263. $(_36).closest("form").trigger("_change",[_36]);
  264. }
  265. };
  266. function _41(_42){
  267. var _43=_2f(_42);
  268. return _43[0];
  269. };
  270. function _44(_45,_46){
  271. _35(_45,[_46]);
  272. };
  273. function _47(_48){
  274. var _49=$.data(_48,"combo").options;
  275. var _4a=_49.onChange;
  276. _49.onChange=function(){
  277. };
  278. if(_49.multiple){
  279. _35(_48,_49.value?_49.value:[]);
  280. }else{
  281. _44(_48,_49.value);
  282. }
  283. _49.onChange=_4a;
  284. };
  285. $.fn.combo=function(_4b,_4c){
  286. if(typeof _4b=="string"){
  287. var _4d=$.fn.combo.methods[_4b];
  288. if(_4d){
  289. return _4d(this,_4c);
  290. }else{
  291. return this.textbox(_4b,_4c);
  292. }
  293. }
  294. _4b=_4b||{};
  295. return this.each(function(){
  296. var _4e=$.data(this,"combo");
  297. if(_4e){
  298. $.extend(_4e.options,_4b);
  299. if(_4b.value!=undefined){
  300. _4e.options.originalValue=_4b.value;
  301. }
  302. }else{
  303. _4e=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_4b),previousText:""});
  304. _4e.options.originalValue=_4e.options.value;
  305. }
  306. _2(this);
  307. _47(this);
  308. });
  309. };
  310. $.fn.combo.methods={options:function(jq){
  311. var _4f=jq.textbox("options");
  312. return $.extend($.data(jq[0],"combo").options,{width:_4f.width,height:_4f.height,disabled:_4f.disabled,readonly:_4f.readonly});
  313. },cloneFrom:function(jq,_50){
  314. return jq.each(function(){
  315. $(this).textbox("cloneFrom",_50);
  316. $.data(this,"combo",{options:$.extend(true,{cloned:true},$(_50).combo("options")),combo:$(this).next(),panel:$(_50).combo("panel")});
  317. $(this).addClass("combo-f").attr("comboName",$(this).attr("textboxName"));
  318. });
  319. },combo:function(jq){
  320. return jq.closest(".combo-panel").panel("options").comboTarget;
  321. },panel:function(jq){
  322. return $.data(jq[0],"combo").panel;
  323. },destroy:function(jq){
  324. return jq.each(function(){
  325. _b(this);
  326. });
  327. },showPanel:function(jq){
  328. return jq.each(function(){
  329. _1e(this);
  330. });
  331. },hidePanel:function(jq){
  332. return jq.each(function(){
  333. _13(this);
  334. });
  335. },clear:function(jq){
  336. return jq.each(function(){
  337. $(this).textbox("setText","");
  338. var _51=$.data(this,"combo").options;
  339. if(_51.multiple){
  340. $(this).combo("setValues",[]);
  341. }else{
  342. $(this).combo("setValue","");
  343. }
  344. });
  345. },reset:function(jq){
  346. return jq.each(function(){
  347. var _52=$.data(this,"combo").options;
  348. if(_52.multiple){
  349. $(this).combo("setValues",_52.originalValue);
  350. }else{
  351. $(this).combo("setValue",_52.originalValue);
  352. }
  353. });
  354. },setText:function(jq,_53){
  355. return jq.each(function(){
  356. _2a(this,_53);
  357. });
  358. },getValues:function(jq){
  359. return _2f(jq[0]);
  360. },setValues:function(jq,_54){
  361. return jq.each(function(){
  362. _35(this,_54);
  363. });
  364. },getValue:function(jq){
  365. return _41(jq[0]);
  366. },setValue:function(jq,_55){
  367. return jq.each(function(){
  368. _44(this,_55);
  369. });
  370. }};
  371. $.fn.combo.parseOptions=function(_56){
  372. var t=$(_56);
  373. return $.extend({},$.fn.textbox.parseOptions(_56),$.parser.parseOptions(_56,["separator","panelAlign",{panelWidth:"number",hasDownArrow:"boolean",delay:"number",reversed:"boolean",multivalue:"boolean",selectOnNavigation:"boolean"},{panelMinWidth:"number",panelMaxWidth:"number",panelMinHeight:"number",panelMaxHeight:"number"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined)});
  374. };
  375. $.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_15,keydown:_1a,paste:_1a,drop:_1a},panelWidth:null,panelHeight:200,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:"left",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:",",hasDownArrow:true,delay:200,keyHandler:{up:function(e){
  376. },down:function(e){
  377. },left:function(e){
  378. },right:function(e){
  379. },enter:function(e){
  380. },query:function(q,e){
  381. }},onShowPanel:function(){
  382. },onHidePanel:function(){
  383. },onChange:function(_57,_58){
  384. }});
  385. })(jQuery);