jquery.combo.js 9.8 KB

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