jquery.combobox.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. /**
  2. * jQuery EasyUI 1.4.4
  3. *
  4. * Copyright (c) 2009-2015 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. var _1=0;
  12. function _2(_3,_4){
  13. var _5=$.data(_3,"combobox");
  14. var _6=_5.options;
  15. var _7=_5.data;
  16. for(var i=0;i<_7.length;i++){
  17. if(_7[i][_6.valueField]==_4){
  18. return i;
  19. }
  20. }
  21. return -1;
  22. };
  23. function _8(_9,_a){
  24. var _b=$.data(_9,"combobox").options;
  25. var _c=$(_9).combo("panel");
  26. var _d=_b.finder.getEl(_9,_a);
  27. if(_d.length){
  28. if(_d.position().top<=0){
  29. var h=_c.scrollTop()+_d.position().top;
  30. _c.scrollTop(h);
  31. }else{
  32. if(_d.position().top+_d.outerHeight()>_c.height()){
  33. var h=_c.scrollTop()+_d.position().top+_d.outerHeight()-_c.height();
  34. _c.scrollTop(h);
  35. }
  36. }
  37. }
  38. };
  39. function _e(_f,dir){
  40. var _10=$.data(_f,"combobox").options;
  41. var _11=$(_f).combobox("panel");
  42. var _12=_11.children("div.combobox-item-hover");
  43. if(!_12.length){
  44. _12=_11.children("div.combobox-item-selected");
  45. }
  46. _12.removeClass("combobox-item-hover");
  47. var _13="div.combobox-item:visible:not(.combobox-item-disabled):first";
  48. var _14="div.combobox-item:visible:not(.combobox-item-disabled):last";
  49. if(!_12.length){
  50. _12=_11.children(dir=="next"?_13:_14);
  51. }else{
  52. if(dir=="next"){
  53. _12=_12.nextAll(_13);
  54. if(!_12.length){
  55. _12=_11.children(_13);
  56. }
  57. }else{
  58. _12=_12.prevAll(_13);
  59. if(!_12.length){
  60. _12=_11.children(_14);
  61. }
  62. }
  63. }
  64. if(_12.length){
  65. _12.addClass("combobox-item-hover");
  66. var row=_10.finder.getRow(_f,_12);
  67. if(row){
  68. _8(_f,row[_10.valueField]);
  69. if(_10.selectOnNavigation){
  70. _15(_f,row[_10.valueField]);
  71. }
  72. }
  73. }
  74. };
  75. function _15(_16,_17){
  76. var _18=$.data(_16,"combobox").options;
  77. var _19=$(_16).combo("getValues");
  78. if($.inArray(_17+"",_19)==-1){
  79. if(_18.multiple){
  80. _19.push(_17);
  81. }else{
  82. _19=[_17];
  83. }
  84. _1a(_16,_19);
  85. _18.onSelect.call(_16,_18.finder.getRow(_16,_17));
  86. }
  87. };
  88. function _1b(_1c,_1d){
  89. var _1e=$.data(_1c,"combobox").options;
  90. var _1f=$(_1c).combo("getValues");
  91. var _20=$.inArray(_1d+"",_1f);
  92. if(_20>=0){
  93. _1f.splice(_20,1);
  94. _1a(_1c,_1f);
  95. _1e.onUnselect.call(_1c,_1e.finder.getRow(_1c,_1d));
  96. }
  97. };
  98. function _1a(_21,_22,_23){
  99. var _24=$.data(_21,"combobox").options;
  100. var _25=$(_21).combo("panel");
  101. if(!$.isArray(_22)){
  102. _22=_22.split(_24.separator);
  103. }
  104. _25.find("div.combobox-item-selected").removeClass("combobox-item-selected");
  105. var vv=[],ss=[];
  106. for(var i=0;i<_22.length;i++){
  107. var v=_22[i];
  108. var s=v;
  109. _24.finder.getEl(_21,v).addClass("combobox-item-selected");
  110. var row=_24.finder.getRow(_21,v);
  111. if(row){
  112. s=row[_24.textField];
  113. }
  114. vv.push(v);
  115. ss.push(s);
  116. }
  117. if(!_23){
  118. $(_21).combo("setText",ss.join(_24.separator));
  119. }
  120. $(_21).combo("setValues",vv);
  121. };
  122. function _26(_27,_28,_29){
  123. var _2a=$.data(_27,"combobox");
  124. var _2b=_2a.options;
  125. _2a.data=_2b.loadFilter.call(_27,_28);
  126. _2a.groups=[];
  127. _28=_2a.data;
  128. var _2c=$(_27).combobox("getValues");
  129. var dd=[];
  130. var _2d=undefined;
  131. for(var i=0;i<_28.length;i++){
  132. var row=_28[i];
  133. var v=row[_2b.valueField]+"";
  134. var s=row[_2b.textField];
  135. var g=row[_2b.groupField];
  136. if(g){
  137. if(_2d!=g){
  138. _2d=g;
  139. _2a.groups.push(g);
  140. dd.push("<div id=\""+(_2a.groupIdPrefix+"_"+(_2a.groups.length-1))+"\" class=\"combobox-group\">");
  141. dd.push(_2b.groupFormatter?_2b.groupFormatter.call(_27,g):g);
  142. dd.push("</div>");
  143. }
  144. }else{
  145. _2d=undefined;
  146. }
  147. var cls="combobox-item"+(row.disabled?" combobox-item-disabled":"")+(g?" combobox-gitem":"");
  148. dd.push("<div id=\""+(_2a.itemIdPrefix+"_"+i)+"\" class=\""+cls+"\">");
  149. dd.push(_2b.formatter?_2b.formatter.call(_27,row):s);
  150. dd.push("</div>");
  151. if(row["selected"]&&$.inArray(v,_2c)==-1){
  152. _2c.push(v);
  153. }
  154. }
  155. $(_27).combo("panel").html(dd.join(""));
  156. if(_2b.multiple){
  157. _1a(_27,_2c,_29);
  158. }else{
  159. _1a(_27,_2c.length?[_2c[_2c.length-1]]:[],_29);
  160. }
  161. _2b.onLoadSuccess.call(_27,_28);
  162. };
  163. function _2e(_2f,url,_30,_31){
  164. var _32=$.data(_2f,"combobox").options;
  165. if(url){
  166. _32.url=url;
  167. }
  168. _30=$.extend({},_32.queryParams,_30||{});
  169. if(_32.onBeforeLoad.call(_2f,_30)==false){
  170. return;
  171. }
  172. _32.loader.call(_2f,_30,function(_33){
  173. _26(_2f,_33,_31);
  174. },function(){
  175. _32.onLoadError.apply(this,arguments);
  176. });
  177. };
  178. function _34(_35,q){
  179. var _36=$.data(_35,"combobox");
  180. var _37=_36.options;
  181. var qq=_37.multiple?q.split(_37.separator):[q];
  182. if(_37.mode=="remote"){
  183. _38(qq);
  184. _2e(_35,null,{q:q},true);
  185. }else{
  186. var _39=$(_35).combo("panel");
  187. _39.find("div.combobox-item-selected,div.combobox-item-hover").removeClass("combobox-item-selected combobox-item-hover");
  188. _39.find("div.combobox-item,div.combobox-group").hide();
  189. var _3a=_36.data;
  190. var vv=[];
  191. $.map(qq,function(q){
  192. q=$.trim(q);
  193. var _3b=q;
  194. var _3c=undefined;
  195. for(var i=0;i<_3a.length;i++){
  196. var row=_3a[i];
  197. if(_37.filter.call(_35,q,row)){
  198. var v=row[_37.valueField];
  199. var s=row[_37.textField];
  200. var g=row[_37.groupField];
  201. var _3d=_37.finder.getEl(_35,v).show();
  202. if(s.toLowerCase()==q.toLowerCase()){
  203. _3b=v;
  204. _3d.addClass("combobox-item-selected");
  205. _37.onSelect.call(_35,row);
  206. }
  207. if(_37.groupField&&_3c!=g){
  208. $("#"+_36.groupIdPrefix+"_"+$.inArray(g,_36.groups)).show();
  209. _3c=g;
  210. }
  211. }
  212. }
  213. vv.push(_3b);
  214. });
  215. _38(vv);
  216. }
  217. function _38(vv){
  218. _1a(_35,_37.multiple?(q?vv:[]):vv,true);
  219. };
  220. };
  221. function _3e(_3f){
  222. var t=$(_3f);
  223. var _40=t.combobox("options");
  224. var _41=t.combobox("panel");
  225. var _42=_41.children("div.combobox-item-hover");
  226. if(_42.length){
  227. var row=_40.finder.getRow(_3f,_42);
  228. var _43=row[_40.valueField];
  229. if(_40.multiple){
  230. if(_42.hasClass("combobox-item-selected")){
  231. t.combobox("unselect",_43);
  232. }else{
  233. t.combobox("select",_43);
  234. }
  235. }else{
  236. t.combobox("select",_43);
  237. }
  238. }
  239. var vv=[];
  240. $.map(t.combobox("getValues"),function(v){
  241. if(_2(_3f,v)>=0){
  242. vv.push(v);
  243. }
  244. });
  245. t.combobox("setValues",vv);
  246. if(!_40.multiple){
  247. t.combobox("hidePanel");
  248. }
  249. };
  250. function _44(_45){
  251. var _46=$.data(_45,"combobox");
  252. var _47=_46.options;
  253. _1++;
  254. _46.itemIdPrefix="_easyui_combobox_i"+_1;
  255. _46.groupIdPrefix="_easyui_combobox_g"+_1;
  256. $(_45).addClass("combobox-f");
  257. $(_45).combo($.extend({},_47,{onShowPanel:function(){
  258. $(_45).combo("panel").find("div.combobox-item:hidden,div.combobox-group:hidden").show();
  259. _8(_45,$(_45).combobox("getValue"));
  260. _47.onShowPanel.call(_45);
  261. }}));
  262. $(_45).combo("panel").unbind().bind("mouseover",function(e){
  263. $(this).children("div.combobox-item-hover").removeClass("combobox-item-hover");
  264. var _48=$(e.target).closest("div.combobox-item");
  265. if(!_48.hasClass("combobox-item-disabled")){
  266. _48.addClass("combobox-item-hover");
  267. }
  268. e.stopPropagation();
  269. }).bind("mouseout",function(e){
  270. $(e.target).closest("div.combobox-item").removeClass("combobox-item-hover");
  271. e.stopPropagation();
  272. }).bind("click",function(e){
  273. var _49=$(e.target).closest("div.combobox-item");
  274. if(!_49.length||_49.hasClass("combobox-item-disabled")){
  275. return;
  276. }
  277. var row=_47.finder.getRow(_45,_49);
  278. if(!row){
  279. return;
  280. }
  281. var _4a=row[_47.valueField];
  282. if(_47.multiple){
  283. if(_49.hasClass("combobox-item-selected")){
  284. _1b(_45,_4a);
  285. }else{
  286. _15(_45,_4a);
  287. }
  288. }else{
  289. _15(_45,_4a);
  290. $(_45).combo("hidePanel");
  291. }
  292. e.stopPropagation();
  293. });
  294. };
  295. $.fn.combobox=function(_4b,_4c){
  296. if(typeof _4b=="string"){
  297. var _4d=$.fn.combobox.methods[_4b];
  298. if(_4d){
  299. return _4d(this,_4c);
  300. }else{
  301. return this.combo(_4b,_4c);
  302. }
  303. }
  304. _4b=_4b||{};
  305. return this.each(function(){
  306. var _4e=$.data(this,"combobox");
  307. if(_4e){
  308. $.extend(_4e.options,_4b);
  309. }else{
  310. _4e=$.data(this,"combobox",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_4b),data:[]});
  311. }
  312. _44(this);
  313. if(_4e.options.data){
  314. _26(this,_4e.options.data);
  315. }else{
  316. var _4f=$.fn.combobox.parseData(this);
  317. if(_4f.length){
  318. _26(this,_4f);
  319. }
  320. }
  321. _2e(this);
  322. });
  323. };
  324. $.fn.combobox.methods={options:function(jq){
  325. var _50=jq.combo("options");
  326. return $.extend($.data(jq[0],"combobox").options,{width:_50.width,height:_50.height,originalValue:_50.originalValue,disabled:_50.disabled,readonly:_50.readonly});
  327. },getData:function(jq){
  328. return $.data(jq[0],"combobox").data;
  329. },setValues:function(jq,_51){
  330. return jq.each(function(){
  331. _1a(this,_51);
  332. });
  333. },setValue:function(jq,_52){
  334. return jq.each(function(){
  335. _1a(this,[_52]);
  336. });
  337. },clear:function(jq){
  338. return jq.each(function(){
  339. $(this).combo("clear");
  340. var _53=$(this).combo("panel");
  341. _53.find("div.combobox-item-selected").removeClass("combobox-item-selected");
  342. });
  343. },reset:function(jq){
  344. return jq.each(function(){
  345. var _54=$(this).combobox("options");
  346. if(_54.multiple){
  347. $(this).combobox("setValues",_54.originalValue);
  348. }else{
  349. $(this).combobox("setValue",_54.originalValue);
  350. }
  351. });
  352. },loadData:function(jq,_55){
  353. return jq.each(function(){
  354. _26(this,_55);
  355. });
  356. },reload:function(jq,url){
  357. return jq.each(function(){
  358. if(typeof url=="string"){
  359. _2e(this,url);
  360. }else{
  361. if(url){
  362. var _56=$(this).combobox("options");
  363. _56.queryParams=url;
  364. }
  365. _2e(this);
  366. }
  367. });
  368. },select:function(jq,_57){
  369. return jq.each(function(){
  370. _15(this,_57);
  371. });
  372. },unselect:function(jq,_58){
  373. return jq.each(function(){
  374. _1b(this,_58);
  375. });
  376. }};
  377. $.fn.combobox.parseOptions=function(_59){
  378. var t=$(_59);
  379. return $.extend({},$.fn.combo.parseOptions(_59),$.parser.parseOptions(_59,["valueField","textField","groupField","mode","method","url"]));
  380. };
  381. $.fn.combobox.parseData=function(_5a){
  382. var _5b=[];
  383. var _5c=$(_5a).combobox("options");
  384. $(_5a).children().each(function(){
  385. if(this.tagName.toLowerCase()=="optgroup"){
  386. var _5d=$(this).attr("label");
  387. $(this).children().each(function(){
  388. _5e(this,_5d);
  389. });
  390. }else{
  391. _5e(this);
  392. }
  393. });
  394. return _5b;
  395. function _5e(el,_5f){
  396. var t=$(el);
  397. var row={};
  398. row[_5c.valueField]=t.attr("value")!=undefined?t.attr("value"):t.text();
  399. row[_5c.textField]=t.text();
  400. row["selected"]=t.is(":selected");
  401. row["disabled"]=t.is(":disabled");
  402. if(_5f){
  403. _5c.groupField=_5c.groupField||"group";
  404. row[_5c.groupField]=_5f;
  405. }
  406. _5b.push(row);
  407. };
  408. };
  409. $.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:"value",textField:"text",groupField:null,groupFormatter:function(_60){
  410. return _60;
  411. },mode:"local",method:"post",url:null,data:null,queryParams:{},keyHandler:{up:function(e){
  412. _e(this,"prev");
  413. e.preventDefault();
  414. },down:function(e){
  415. _e(this,"next");
  416. e.preventDefault();
  417. },left:function(e){
  418. },right:function(e){
  419. },enter:function(e){
  420. _3e(this);
  421. },query:function(q,e){
  422. _34(this,q);
  423. }},filter:function(q,row){
  424. var _61=$(this).combobox("options");
  425. return row[_61.textField].toLowerCase().indexOf(q.toLowerCase())>=0;
  426. },formatter:function(row){
  427. var _62=$(this).combobox("options");
  428. return row[_62.textField];
  429. },loader:function(_63,_64,_65){
  430. var _66=$(this).combobox("options");
  431. if(!_66.url){
  432. return false;
  433. }
  434. $.ajax({type:_66.method,url:_66.url,data:_63,dataType:"json",success:function(_67){
  435. _64(_67);
  436. },error:function(){
  437. _65.apply(this,arguments);
  438. }});
  439. },loadFilter:function(_68){
  440. return _68;
  441. },finder:{getEl:function(_69,_6a){
  442. var _6b=_2(_69,_6a);
  443. var id=$.data(_69,"combobox").itemIdPrefix+"_"+_6b;
  444. return $("#"+id);
  445. },getRow:function(_6c,p){
  446. var _6d=$.data(_6c,"combobox");
  447. var _6e=(p instanceof jQuery)?p.attr("id").substr(_6d.itemIdPrefix.length+1):_2(_6c,p);
  448. return _6d.data[parseInt(_6e)];
  449. }},onBeforeLoad:function(_6f){
  450. },onLoadSuccess:function(){
  451. },onLoadError:function(){
  452. },onSelect:function(_70){
  453. },onUnselect:function(_71){
  454. }});
  455. })(jQuery);