jquery.form.js 8.6 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 _1(_2,_3){
  12. var _4=$.data(_2,"form").options;
  13. $.extend(_4,_3||{});
  14. var _5=$.extend({},_4.queryParams);
  15. if(_4.onSubmit.call(_2,_5)==false){
  16. return;
  17. }
  18. var _6=$(_2).find(".textbox-text:focus");
  19. _6.triggerHandler("blur");
  20. _6.focus();
  21. var _7=null;
  22. if(_4.dirty){
  23. var ff=[];
  24. $.map(_4.dirtyFields,function(f){
  25. if($(f).hasClass("textbox-f")){
  26. $(f).next().find(".textbox-value").each(function(){
  27. ff.push(this);
  28. });
  29. }else{
  30. ff.push(f);
  31. }
  32. });
  33. _7=$(_2).find("input[name]:enabled,textarea[name]:enabled,select[name]:enabled").filter(function(){
  34. return $.inArray(this,ff)==-1;
  35. });
  36. _7._propAttr("disabled",true);
  37. }
  38. if(_4.ajax){
  39. if(_4.iframe){
  40. _8(_2,_5);
  41. }else{
  42. if(window.FormData!==undefined){
  43. _9(_2,_5);
  44. }else{
  45. _8(_2,_5);
  46. }
  47. }
  48. }else{
  49. $(_2).submit();
  50. }
  51. if(_4.dirty){
  52. _7._propAttr("disabled",false);
  53. }
  54. };
  55. function _8(_a,_b){
  56. var _c=$.data(_a,"form").options;
  57. var _d="easyui_frame_"+(new Date().getTime());
  58. var _e=$("<iframe id="+_d+" name="+_d+"></iframe>").appendTo("body");
  59. _e.attr("src",window.ActiveXObject?"javascript:false":"about:blank");
  60. _e.css({position:"absolute",top:-1000,left:-1000});
  61. _e.bind("load",cb);
  62. _f(_b);
  63. function _f(_10){
  64. var _11=$(_a);
  65. if(_c.url){
  66. _11.attr("action",_c.url);
  67. }
  68. var t=_11.attr("target"),a=_11.attr("action");
  69. _11.attr("target",_d);
  70. var _12=$();
  71. try{
  72. for(var n in _10){
  73. var _13=$("<input type=\"hidden\" name=\""+n+"\">").val(_10[n]).appendTo(_11);
  74. _12=_12.add(_13);
  75. }
  76. _14();
  77. _11[0].submit();
  78. }
  79. finally{
  80. _11.attr("action",a);
  81. t?_11.attr("target",t):_11.removeAttr("target");
  82. _12.remove();
  83. }
  84. };
  85. function _14(){
  86. var f=$("#"+_d);
  87. if(!f.length){
  88. return;
  89. }
  90. try{
  91. var s=f.contents()[0].readyState;
  92. if(s&&s.toLowerCase()=="uninitialized"){
  93. setTimeout(_14,100);
  94. }
  95. }
  96. catch(e){
  97. cb();
  98. }
  99. };
  100. var _15=10;
  101. function cb(){
  102. var f=$("#"+_d);
  103. if(!f.length){
  104. return;
  105. }
  106. f.unbind();
  107. var _16="";
  108. try{
  109. var _17=f.contents().find("body");
  110. _16=_17.html();
  111. if(_16==""){
  112. if(--_15){
  113. setTimeout(cb,100);
  114. return;
  115. }
  116. }
  117. var ta=_17.find(">textarea");
  118. if(ta.length){
  119. _16=ta.val();
  120. }else{
  121. var pre=_17.find(">pre");
  122. if(pre.length){
  123. _16=pre.html();
  124. }
  125. }
  126. }
  127. catch(e){
  128. }
  129. _c.success.call(_a,_16);
  130. setTimeout(function(){
  131. f.unbind();
  132. f.remove();
  133. },100);
  134. };
  135. };
  136. function _9(_18,_19){
  137. var _1a=$.data(_18,"form").options;
  138. var _1b=new FormData($(_18)[0]);
  139. for(var _1c in _19){
  140. _1b.append(_1c,_19[_1c]);
  141. }
  142. $.ajax({url:_1a.url,type:"post",xhr:function(){
  143. var xhr=$.ajaxSettings.xhr();
  144. if(xhr.upload){
  145. xhr.upload.addEventListener("progress",function(e){
  146. if(e.lengthComputable){
  147. var _1d=e.total;
  148. var _1e=e.loaded||e.position;
  149. var _1f=Math.ceil(_1e*100/_1d);
  150. _1a.onProgress.call(_18,_1f);
  151. }
  152. },false);
  153. }
  154. return xhr;
  155. },data:_1b,dataType:"html",cache:false,contentType:false,processData:false,complete:function(res){
  156. _1a.success.call(_18,res.responseText);
  157. }});
  158. };
  159. function _20(_21,_22){
  160. var _23=$.data(_21,"form").options;
  161. if(typeof _22=="string"){
  162. var _24={};
  163. if(_23.onBeforeLoad.call(_21,_24)==false){
  164. return;
  165. }
  166. $.ajax({url:_22,data:_24,dataType:"json",success:function(_25){
  167. _26(_25);
  168. },error:function(){
  169. _23.onLoadError.apply(_21,arguments);
  170. }});
  171. }else{
  172. _26(_22);
  173. }
  174. function _26(_27){
  175. var _28=$(_21);
  176. for(var _29 in _27){
  177. var val=_27[_29];
  178. if(!_2a(_29,val)){
  179. if(!_2b(_29,val)){
  180. _28.find("input[name=\""+_29+"\"]").val(val);
  181. _28.find("textarea[name=\""+_29+"\"]").val(val);
  182. _28.find("select[name=\""+_29+"\"]").val(val);
  183. }
  184. }
  185. }
  186. _23.onLoadSuccess.call(_21,_27);
  187. _28.form("validate");
  188. };
  189. function _2a(_2c,val){
  190. var _2d=["switchbutton","radiobutton","checkbox"];
  191. for(var i=0;i<_2d.length;i++){
  192. var _2e=_2d[i];
  193. var cc=$(_21).find("["+_2e+"Name=\""+_2c+"\"]");
  194. if(cc.length){
  195. cc[_2e]("uncheck");
  196. cc.each(function(){
  197. if(_2f($(this)[_2e]("options").value,val)){
  198. $(this)[_2e]("check");
  199. }
  200. });
  201. return true;
  202. }
  203. }
  204. var cc=$(_21).find("input[name=\""+_2c+"\"][type=radio], input[name=\""+_2c+"\"][type=checkbox]");
  205. if(cc.length){
  206. cc._propAttr("checked",false);
  207. cc.each(function(){
  208. if(_2f($(this).val(),val)){
  209. $(this)._propAttr("checked",true);
  210. }
  211. });
  212. return true;
  213. }
  214. return false;
  215. };
  216. function _2f(v,val){
  217. if(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){
  218. return true;
  219. }else{
  220. return false;
  221. }
  222. };
  223. function _2b(_30,val){
  224. var _31=$(_21).find("[textboxName=\""+_30+"\"],[sliderName=\""+_30+"\"]");
  225. if(_31.length){
  226. for(var i=0;i<_23.fieldTypes.length;i++){
  227. var _32=_23.fieldTypes[i];
  228. var _33=_31.data(_32);
  229. if(_33){
  230. if(_33.options.multiple||_33.options.range){
  231. _31[_32]("setValues",val);
  232. }else{
  233. _31[_32]("setValue",val);
  234. }
  235. return true;
  236. }
  237. }
  238. }
  239. return false;
  240. };
  241. };
  242. function _34(_35){
  243. $("input,select,textarea",_35).each(function(){
  244. if($(this).hasClass("textbox-value")){
  245. return;
  246. }
  247. var t=this.type,tag=this.tagName.toLowerCase();
  248. if(t=="text"||t=="hidden"||t=="password"||tag=="textarea"){
  249. this.value="";
  250. }else{
  251. if(t=="file"){
  252. var _36=$(this);
  253. if(!_36.hasClass("textbox-value")){
  254. var _37=_36.clone().val("");
  255. _37.insertAfter(_36);
  256. if(_36.data("validatebox")){
  257. _36.validatebox("destroy");
  258. _37.validatebox();
  259. }else{
  260. _36.remove();
  261. }
  262. }
  263. }else{
  264. if(t=="checkbox"||t=="radio"){
  265. this.checked=false;
  266. }else{
  267. if(tag=="select"){
  268. this.selectedIndex=-1;
  269. }
  270. }
  271. }
  272. }
  273. });
  274. var tmp=$();
  275. var _38=$(_35);
  276. var _39=$.data(_35,"form").options;
  277. for(var i=0;i<_39.fieldTypes.length;i++){
  278. var _3a=_39.fieldTypes[i];
  279. var _3b=_38.find("."+_3a+"-f").not(tmp);
  280. if(_3b.length&&_3b[_3a]){
  281. _3b[_3a]("clear");
  282. tmp=tmp.add(_3b);
  283. }
  284. }
  285. _38.form("validate");
  286. };
  287. function _3c(_3d){
  288. _3d.reset();
  289. var _3e=$(_3d);
  290. var _3f=$.data(_3d,"form").options;
  291. for(var i=_3f.fieldTypes.length-1;i>=0;i--){
  292. var _40=_3f.fieldTypes[i];
  293. var _41=_3e.find("."+_40+"-f");
  294. if(_41.length&&_41[_40]){
  295. _41[_40]("reset");
  296. }
  297. }
  298. _3e.form("validate");
  299. };
  300. function _42(_43){
  301. var _44=$.data(_43,"form").options;
  302. $(_43).unbind(".form");
  303. if(_44.ajax){
  304. $(_43).bind("submit.form",function(){
  305. setTimeout(function(){
  306. _1(_43,_44);
  307. },0);
  308. return false;
  309. });
  310. }
  311. $(_43).bind("_change.form",function(e,t){
  312. if($.inArray(t,_44.dirtyFields)==-1){
  313. _44.dirtyFields.push(t);
  314. }
  315. _44.onChange.call(this,t);
  316. }).bind("change.form",function(e){
  317. var t=e.target;
  318. if(!$(t).hasClass("textbox-text")){
  319. if($.inArray(t,_44.dirtyFields)==-1){
  320. _44.dirtyFields.push(t);
  321. }
  322. _44.onChange.call(this,t);
  323. }
  324. });
  325. _45(_43,_44.novalidate);
  326. };
  327. function _46(_47,_48){
  328. _48=_48||{};
  329. var _49=$.data(_47,"form");
  330. if(_49){
  331. $.extend(_49.options,_48);
  332. }else{
  333. $.data(_47,"form",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_47),_48)});
  334. }
  335. };
  336. function _4a(_4b){
  337. if($.fn.validatebox){
  338. var t=$(_4b);
  339. t.find(".validatebox-text:not(:disabled)").validatebox("validate");
  340. var _4c=t.find(".validatebox-invalid");
  341. _4c.filter(":not(:disabled):first").focus();
  342. return _4c.length==0;
  343. }
  344. return true;
  345. };
  346. function _45(_4d,_4e){
  347. var _4f=$.data(_4d,"form").options;
  348. _4f.novalidate=_4e;
  349. $(_4d).find(".validatebox-text:not(:disabled)").validatebox(_4e?"disableValidation":"enableValidation");
  350. };
  351. $.fn.form=function(_50,_51){
  352. if(typeof _50=="string"){
  353. this.each(function(){
  354. _46(this);
  355. });
  356. return $.fn.form.methods[_50](this,_51);
  357. }
  358. return this.each(function(){
  359. _46(this,_50);
  360. _42(this);
  361. });
  362. };
  363. $.fn.form.methods={options:function(jq){
  364. return $.data(jq[0],"form").options;
  365. },submit:function(jq,_52){
  366. return jq.each(function(){
  367. _1(this,_52);
  368. });
  369. },load:function(jq,_53){
  370. return jq.each(function(){
  371. _20(this,_53);
  372. });
  373. },clear:function(jq){
  374. return jq.each(function(){
  375. _34(this);
  376. });
  377. },reset:function(jq){
  378. return jq.each(function(){
  379. _3c(this);
  380. });
  381. },validate:function(jq){
  382. return _4a(jq[0]);
  383. },disableValidation:function(jq){
  384. return jq.each(function(){
  385. _45(this,true);
  386. });
  387. },enableValidation:function(jq){
  388. return jq.each(function(){
  389. _45(this,false);
  390. });
  391. },resetValidation:function(jq){
  392. return jq.each(function(){
  393. $(this).find(".validatebox-text:not(:disabled)").validatebox("resetValidation");
  394. });
  395. },resetDirty:function(jq){
  396. return jq.each(function(){
  397. $(this).form("options").dirtyFields=[];
  398. });
  399. }};
  400. $.fn.form.parseOptions=function(_54){
  401. var t=$(_54);
  402. return $.extend({},$.parser.parseOptions(_54,[{ajax:"boolean",dirty:"boolean"}]),{url:(t.attr("action")?t.attr("action"):undefined)});
  403. };
  404. $.fn.form.defaults={fieldTypes:["tagbox","combobox","combotree","combogrid","combotreegrid","datetimebox","datebox","combo","datetimespinner","timespinner","numberspinner","spinner","slider","searchbox","numberbox","passwordbox","filebox","textbox","switchbutton","radiobutton","checkbox"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_55){
  405. return $(this).form("validate");
  406. },onProgress:function(_56){
  407. },success:function(_57){
  408. },onBeforeLoad:function(_58){
  409. },onLoadSuccess:function(_59){
  410. },onLoadError:function(){
  411. },onChange:function(_5a){
  412. }};
  413. })(jQuery);