jquery.combogrid.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /**
  2. * jQuery EasyUI 1.3.4
  3. *
  4. * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL or commercial licenses
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. * http://www.gnu.org/licenses/gpl.txt
  9. * http://www.jeasyui.com/license_commercial.php
  10. *
  11. */
  12. (function($){
  13. function _1(_2){
  14. var _3=$.data(_2,"combogrid");
  15. var _4=_3.options;
  16. var _5=_3.grid;
  17. $(_2).addClass("combogrid-f").combo(_4);
  18. var _6=$(_2).combo("panel");
  19. if(!_5){
  20. _5=$("<table></table>").appendTo(_6);
  21. _3.grid=_5;
  22. }
  23. _5.datagrid($.extend({},_4,{border:false,fit:true,singleSelect:(!_4.multiple),onLoadSuccess:function(_7){
  24. var _8=$(_2).combo("getValues");
  25. var _9=_4.onSelect;
  26. _4.onSelect=function(){
  27. };
  28. _1a(_2,_8,_3.remainText);
  29. _4.onSelect=_9;
  30. _4.onLoadSuccess.apply(_2,arguments);
  31. },onClickRow:_a,onSelect:function(_b,_c){
  32. _d();
  33. _4.onSelect.call(this,_b,_c);
  34. },onUnselect:function(_e,_f){
  35. _d();
  36. _4.onUnselect.call(this,_e,_f);
  37. },onSelectAll:function(_10){
  38. _d();
  39. _4.onSelectAll.call(this,_10);
  40. },onUnselectAll:function(_11){
  41. if(_4.multiple){
  42. _d();
  43. }
  44. _4.onUnselectAll.call(this,_11);
  45. }}));
  46. function _a(_12,row){
  47. _3.remainText=false;
  48. _d();
  49. if(!_4.multiple){
  50. $(_2).combo("hidePanel");
  51. }
  52. _4.onClickRow.call(this,_12,row);
  53. };
  54. function _d(){
  55. var _13=_5.datagrid("getSelections");
  56. var vv=[],ss=[];
  57. for(var i=0;i<_13.length;i++){
  58. vv.push(_13[i][_4.idField]);
  59. ss.push(_13[i][_4.textField]);
  60. }
  61. if(!_4.multiple){
  62. $(_2).combo("setValues",(vv.length?vv:[""]));
  63. }else{
  64. $(_2).combo("setValues",vv);
  65. }
  66. if(!_3.remainText){
  67. $(_2).combo("setText",ss.join(_4.separator));
  68. }
  69. };
  70. };
  71. function nav(_14,dir){
  72. var _15=$.data(_14,"combogrid");
  73. var _16=_15.options;
  74. var _17=_15.grid;
  75. var _18=_17.datagrid("getRows").length;
  76. if(!_18){
  77. return;
  78. }
  79. var tr=_16.finder.getTr(_17[0],null,"highlight");
  80. if(!tr.length){
  81. tr=_16.finder.getTr(_17[0],null,"selected");
  82. }
  83. var _19;
  84. if(!tr.length){
  85. _19=(dir=="next"?0:_18-1);
  86. }else{
  87. var _19=parseInt(tr.attr("datagrid-row-index"));
  88. _19+=(dir=="next"?1:-1);
  89. if(_19<0){
  90. _19=_18-1;
  91. }
  92. if(_19>=_18){
  93. _19=0;
  94. }
  95. }
  96. _17.datagrid("highlightRow",_19);
  97. if(_16.selectOnNavigation){
  98. _15.remainText=false;
  99. _17.datagrid("selectRow",_19);
  100. }
  101. };
  102. function _1a(_1b,_1c,_1d){
  103. var _1e=$.data(_1b,"combogrid");
  104. var _1f=_1e.options;
  105. var _20=_1e.grid;
  106. var _21=_20.datagrid("getRows");
  107. var ss=[];
  108. var _22=$(_1b).combo("getValues");
  109. var _23=$(_1b).combo("options");
  110. var _24=_23.onChange;
  111. _23.onChange=function(){
  112. };
  113. _20.datagrid("clearSelections");
  114. for(var i=0;i<_1c.length;i++){
  115. var _25=_20.datagrid("getRowIndex",_1c[i]);
  116. if(_25>=0){
  117. _20.datagrid("selectRow",_25);
  118. ss.push(_21[_25][_1f.textField]);
  119. }else{
  120. ss.push(_1c[i]);
  121. }
  122. }
  123. $(_1b).combo("setValues",_22);
  124. _23.onChange=_24;
  125. $(_1b).combo("setValues",_1c);
  126. if(!_1d){
  127. var s=ss.join(_1f.separator);
  128. if($(_1b).combo("getText")!=s){
  129. $(_1b).combo("setText",s);
  130. }
  131. }
  132. };
  133. function _26(_27,q){
  134. var _28=$.data(_27,"combogrid");
  135. var _29=_28.options;
  136. var _2a=_28.grid;
  137. _28.remainText=true;
  138. if(_29.multiple&&!q){
  139. _1a(_27,[],true);
  140. }else{
  141. _1a(_27,[q],true);
  142. }
  143. if(_29.mode=="remote"){
  144. _2a.datagrid("clearSelections");
  145. _2a.datagrid("load",$.extend({},_29.queryParams,{q:q}));
  146. }else{
  147. if(!q){
  148. return;
  149. }
  150. var _2b=_2a.datagrid("getRows");
  151. for(var i=0;i<_2b.length;i++){
  152. if(_29.filter.call(_27,q,_2b[i])){
  153. _2a.datagrid("clearSelections");
  154. _2a.datagrid("selectRow",i);
  155. return;
  156. }
  157. }
  158. }
  159. };
  160. function _2c(_2d){
  161. var _2e=$.data(_2d,"combogrid");
  162. var _2f=_2e.options;
  163. var _30=_2e.grid;
  164. var tr=_2f.finder.getTr(_30[0],null,"highlight");
  165. if(!tr.length){
  166. tr=_2f.finder.getTr(_30[0],null,"selected");
  167. }
  168. if(!tr.length){
  169. return;
  170. }
  171. _2e.remainText=false;
  172. var _31=parseInt(tr.attr("datagrid-row-index"));
  173. if(_2f.multiple){
  174. if(tr.hasClass("datagrid-row-selected")){
  175. _30.datagrid("unselectRow",_31);
  176. }else{
  177. _30.datagrid("selectRow",_31);
  178. }
  179. }else{
  180. _30.datagrid("selectRow",_31);
  181. $(_2d).combogrid("hidePanel");
  182. }
  183. };
  184. $.fn.combogrid=function(_32,_33){
  185. if(typeof _32=="string"){
  186. var _34=$.fn.combogrid.methods[_32];
  187. if(_34){
  188. return _34(this,_33);
  189. }else{
  190. return $.fn.combo.methods[_32](this,_33);
  191. }
  192. }
  193. _32=_32||{};
  194. return this.each(function(){
  195. var _35=$.data(this,"combogrid");
  196. if(_35){
  197. $.extend(_35.options,_32);
  198. }else{
  199. _35=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_32)});
  200. }
  201. _1(this);
  202. });
  203. };
  204. $.fn.combogrid.methods={options:function(jq){
  205. var _36=jq.combo("options");
  206. return $.extend($.data(jq[0],"combogrid").options,{originalValue:_36.originalValue,disabled:_36.disabled,readonly:_36.readonly});
  207. },grid:function(jq){
  208. return $.data(jq[0],"combogrid").grid;
  209. },setValues:function(jq,_37){
  210. return jq.each(function(){
  211. _1a(this,_37);
  212. });
  213. },setValue:function(jq,_38){
  214. return jq.each(function(){
  215. _1a(this,[_38]);
  216. });
  217. },clear:function(jq){
  218. return jq.each(function(){
  219. $(this).combogrid("grid").datagrid("clearSelections");
  220. $(this).combo("clear");
  221. });
  222. },reset:function(jq){
  223. return jq.each(function(){
  224. var _39=$(this).combogrid("options");
  225. if(_39.multiple){
  226. $(this).combogrid("setValues",_39.originalValue);
  227. }else{
  228. $(this).combogrid("setValue",_39.originalValue);
  229. }
  230. });
  231. }};
  232. $.fn.combogrid.parseOptions=function(_3a){
  233. var t=$(_3a);
  234. return $.extend({},$.fn.combo.parseOptions(_3a),$.fn.datagrid.parseOptions(_3a),$.parser.parseOptions(_3a,["idField","textField","mode"]));
  235. };
  236. $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,mode:"local",keyHandler:{up:function(){
  237. nav(this,"prev");
  238. },down:function(){
  239. nav(this,"next");
  240. },enter:function(){
  241. _2c(this);
  242. },query:function(q){
  243. _26(this,q);
  244. }},filter:function(q,row){
  245. var _3b=$(this).combogrid("options");
  246. return row[_3b.textField].indexOf(q)==0;
  247. }});
  248. })(jQuery);