jquery.textbox.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  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. var _1=0;
  12. function _2(_3){
  13. $(_3).addClass("textbox-f").hide();
  14. var _4=$("<span class=\"textbox\">"+"<input class=\"textbox-text\" autocomplete=\"off\">"+"<input type=\"hidden\" class=\"textbox-value\">"+"</span>").insertAfter(_3);
  15. var _5=$(_3).attr("name");
  16. if(_5){
  17. _4.find("input.textbox-value").attr("name",_5);
  18. $(_3).removeAttr("name").attr("textboxName",_5);
  19. }
  20. return _4;
  21. };
  22. function _6(_7){
  23. var _8=$.data(_7,"textbox");
  24. var _9=_8.options;
  25. var tb=_8.textbox;
  26. var _a="_easyui_textbox_input"+(++_1);
  27. tb.addClass(_9.cls);
  28. tb.find(".textbox-text").remove();
  29. if(_9.multiline){
  30. $("<textarea id=\""+_a+"\" class=\"textbox-text\" autocomplete=\"off\"></textarea>").prependTo(tb);
  31. }else{
  32. $("<input id=\""+_a+"\" type=\""+_9.type+"\" class=\"textbox-text\" autocomplete=\"off\">").prependTo(tb);
  33. }
  34. $("#"+_a).attr("tabindex",$(_7).attr("tabindex")||"").css("text-align",_7.style.textAlign||"");
  35. tb.find(".textbox-addon").remove();
  36. var bb=_9.icons?$.extend(true,[],_9.icons):[];
  37. if(_9.iconCls){
  38. bb.push({iconCls:_9.iconCls,disabled:true});
  39. }
  40. if(bb.length){
  41. var bc=$("<span class=\"textbox-addon\"></span>").prependTo(tb);
  42. bc.addClass("textbox-addon-"+_9.iconAlign);
  43. for(var i=0;i<bb.length;i++){
  44. bc.append("<a href=\"javascript:;\" class=\"textbox-icon "+bb[i].iconCls+"\" icon-index=\""+i+"\" tabindex=\"-1\"></a>");
  45. }
  46. }
  47. tb.find(".textbox-button").remove();
  48. if(_9.buttonText||_9.buttonIcon){
  49. var _b=$("<a href=\"javascript:;\" class=\"textbox-button\"></a>").prependTo(tb);
  50. _b.addClass("textbox-button-"+_9.buttonAlign).linkbutton({text:_9.buttonText,iconCls:_9.buttonIcon,onClick:function(){
  51. var t=$(this).parent().prev();
  52. t.textbox("options").onClickButton.call(t[0]);
  53. }});
  54. }
  55. if(_9.label){
  56. if(typeof _9.label=="object"){
  57. _8.label=$(_9.label);
  58. _8.label.attr("for",_a);
  59. }else{
  60. $(_8.label).remove();
  61. _8.label=$("<label class=\"textbox-label\"></label>").html(_9.label);
  62. _8.label.css("textAlign",_9.labelAlign).attr("for",_a);
  63. if(_9.labelPosition=="after"){
  64. _8.label.insertAfter(tb);
  65. }else{
  66. _8.label.insertBefore(_7);
  67. }
  68. _8.label.removeClass("textbox-label-left textbox-label-right textbox-label-top");
  69. _8.label.addClass("textbox-label-"+_9.labelPosition);
  70. }
  71. }else{
  72. $(_8.label).remove();
  73. }
  74. _c(_7);
  75. _d(_7,_9.disabled);
  76. _e(_7,_9.readonly);
  77. };
  78. function _f(_10){
  79. var _11=$.data(_10,"textbox");
  80. var tb=_11.textbox;
  81. tb.find(".textbox-text").validatebox("destroy");
  82. tb.remove();
  83. $(_11.label).remove();
  84. $(_10).remove();
  85. };
  86. function _12(_13,_14){
  87. var _15=$.data(_13,"textbox");
  88. var _16=_15.options;
  89. var tb=_15.textbox;
  90. var _17=tb.parent();
  91. if(_14){
  92. if(typeof _14=="object"){
  93. $.extend(_16,_14);
  94. }else{
  95. _16.width=_14;
  96. }
  97. }
  98. if(isNaN(parseInt(_16.width))){
  99. var c=$(_13).clone();
  100. c.css("visibility","hidden");
  101. c.insertAfter(_13);
  102. _16.width=c.outerWidth();
  103. c.remove();
  104. }
  105. var _18=tb.is(":visible");
  106. if(!_18){
  107. tb.appendTo("body");
  108. }
  109. var _19=tb.find(".textbox-text");
  110. var btn=tb.find(".textbox-button");
  111. var _1a=tb.find(".textbox-addon");
  112. var _1b=_1a.find(".textbox-icon");
  113. if(_16.height=="auto"){
  114. _19.css({margin:"",paddingTop:"",paddingBottom:"",height:"",lineHeight:""});
  115. }
  116. tb._size(_16,_17);
  117. if(_16.label&&_16.labelPosition){
  118. if(_16.labelPosition=="top"){
  119. _15.label._size({width:_16.labelWidth=="auto"?tb.outerWidth():_16.labelWidth},tb);
  120. if(_16.height!="auto"){
  121. tb._size("height",tb.outerHeight()-_15.label.outerHeight());
  122. }
  123. }else{
  124. _15.label._size({width:_16.labelWidth,height:tb.outerHeight()},tb);
  125. if(!_16.multiline){
  126. _15.label.css("lineHeight",_15.label.height()+"px");
  127. }
  128. tb._size("width",tb.outerWidth()-_15.label.outerWidth());
  129. }
  130. }
  131. if(_16.buttonAlign=="left"||_16.buttonAlign=="right"){
  132. btn.linkbutton("resize",{height:tb.height()});
  133. }else{
  134. btn.linkbutton("resize",{width:"100%"});
  135. }
  136. var _1c=tb.width()-_1b.length*_16.iconWidth-_1d("left")-_1d("right");
  137. var _1e=_16.height=="auto"?_19.outerHeight():(tb.height()-_1d("top")-_1d("bottom"));
  138. _1a.css(_16.iconAlign,_1d(_16.iconAlign)+"px");
  139. _1a.css("top",_1d("top")+"px");
  140. _1b.css({width:_16.iconWidth+"px",height:_1e+"px"});
  141. _19.css({paddingLeft:(_13.style.paddingLeft||""),paddingRight:(_13.style.paddingRight||""),marginLeft:_1f("left"),marginRight:_1f("right"),marginTop:_1d("top"),marginBottom:_1d("bottom")});
  142. if(_16.multiline){
  143. _19.css({paddingTop:(_13.style.paddingTop||""),paddingBottom:(_13.style.paddingBottom||"")});
  144. _19._outerHeight(_1e);
  145. }else{
  146. _19.css({paddingTop:0,paddingBottom:0,height:_1e+"px",lineHeight:_1e+"px"});
  147. }
  148. _19._outerWidth(_1c);
  149. _16.onResizing.call(_13,_16.width,_16.height);
  150. if(!_18){
  151. tb.insertAfter(_13);
  152. }
  153. _16.onResize.call(_13,_16.width,_16.height);
  154. function _1f(_20){
  155. return (_16.iconAlign==_20?_1a._outerWidth():0)+_1d(_20);
  156. };
  157. function _1d(_21){
  158. var w=0;
  159. btn.filter(".textbox-button-"+_21).each(function(){
  160. if(_21=="left"||_21=="right"){
  161. w+=$(this).outerWidth();
  162. }else{
  163. w+=$(this).outerHeight();
  164. }
  165. });
  166. return w;
  167. };
  168. };
  169. function _c(_22){
  170. var _23=$(_22).textbox("options");
  171. var _24=$(_22).textbox("textbox");
  172. _24.validatebox($.extend({},_23,{deltaX:function(_25){
  173. return $(_22).textbox("getTipX",_25);
  174. },deltaY:function(_26){
  175. return $(_22).textbox("getTipY",_26);
  176. },onBeforeValidate:function(){
  177. _23.onBeforeValidate.call(_22);
  178. var box=$(this);
  179. if(!box.is(":focus")){
  180. if(box.val()!==_23.value){
  181. _23.oldInputValue=box.val();
  182. box.val(_23.value);
  183. }
  184. }
  185. },onValidate:function(_27){
  186. var box=$(this);
  187. if(_23.oldInputValue!=undefined){
  188. box.val(_23.oldInputValue);
  189. _23.oldInputValue=undefined;
  190. }
  191. var tb=box.parent();
  192. if(_27){
  193. tb.removeClass("textbox-invalid");
  194. }else{
  195. tb.addClass("textbox-invalid");
  196. }
  197. _23.onValidate.call(_22,_27);
  198. }}));
  199. };
  200. function _28(_29){
  201. var _2a=$.data(_29,"textbox");
  202. var _2b=_2a.options;
  203. var tb=_2a.textbox;
  204. var _2c=tb.find(".textbox-text");
  205. _2c.attr("placeholder",_2b.prompt);
  206. _2c.unbind(".textbox");
  207. $(_2a.label).unbind(".textbox");
  208. if(!_2b.disabled&&!_2b.readonly){
  209. if(_2a.label){
  210. $(_2a.label).bind("click.textbox",function(e){
  211. if(!_2b.hasFocusMe){
  212. _2c.focus();
  213. $(_29).textbox("setSelectionRange",{start:0,end:_2c.val().length});
  214. }
  215. });
  216. }
  217. _2c.bind("blur.textbox",function(e){
  218. if(!tb.hasClass("textbox-focused")){
  219. return;
  220. }
  221. _2b.value=$(this).val();
  222. if(_2b.value==""){
  223. $(this).val(_2b.prompt).addClass("textbox-prompt");
  224. }else{
  225. $(this).removeClass("textbox-prompt");
  226. }
  227. tb.removeClass("textbox-focused");
  228. tb.closest(".form-field").removeClass("form-field-focused");
  229. }).bind("focus.textbox",function(e){
  230. _2b.hasFocusMe=true;
  231. if(tb.hasClass("textbox-focused")){
  232. return;
  233. }
  234. if($(this).val()!=_2b.value){
  235. $(this).val(_2b.value);
  236. }
  237. $(this).removeClass("textbox-prompt");
  238. tb.addClass("textbox-focused");
  239. tb.closest(".form-field").addClass("form-field-focused");
  240. });
  241. for(var _2d in _2b.inputEvents){
  242. _2c.bind(_2d+".textbox",{target:_29},_2b.inputEvents[_2d]);
  243. }
  244. }
  245. var _2e=tb.find(".textbox-addon");
  246. _2e.unbind().bind("click",{target:_29},function(e){
  247. var _2f=$(e.target).closest("a.textbox-icon:not(.textbox-icon-disabled)");
  248. if(_2f.length){
  249. var _30=parseInt(_2f.attr("icon-index"));
  250. var _31=_2b.icons[_30];
  251. if(_31&&_31.handler){
  252. _31.handler.call(_2f[0],e);
  253. }
  254. _2b.onClickIcon.call(_29,_30);
  255. }
  256. });
  257. _2e.find(".textbox-icon").each(function(_32){
  258. var _33=_2b.icons[_32];
  259. var _34=$(this);
  260. if(!_33||_33.disabled||_2b.disabled||_2b.readonly){
  261. _34.addClass("textbox-icon-disabled");
  262. }else{
  263. _34.removeClass("textbox-icon-disabled");
  264. }
  265. });
  266. var btn=tb.find(".textbox-button");
  267. btn.linkbutton((_2b.disabled||_2b.readonly)?"disable":"enable");
  268. tb.unbind(".textbox").bind("_resize.textbox",function(e,_35){
  269. if($(this).hasClass("easyui-fluid")||_35){
  270. _12(_29);
  271. }
  272. return false;
  273. });
  274. };
  275. function _d(_36,_37){
  276. var _38=$.data(_36,"textbox");
  277. var _39=_38.options;
  278. var tb=_38.textbox;
  279. var _3a=tb.find(".textbox-text");
  280. var ss=$(_36).add(tb.find(".textbox-value"));
  281. _39.disabled=_37;
  282. if(_39.disabled){
  283. _3a.blur();
  284. _3a.validatebox("disable");
  285. tb.addClass("textbox-disabled");
  286. ss._propAttr("disabled",true);
  287. $(_38.label).addClass("textbox-label-disabled");
  288. }else{
  289. _3a.validatebox("enable");
  290. tb.removeClass("textbox-disabled");
  291. ss._propAttr("disabled",false);
  292. $(_38.label).removeClass("textbox-label-disabled");
  293. }
  294. };
  295. function _e(_3b,_3c){
  296. var _3d=$.data(_3b,"textbox");
  297. var _3e=_3d.options;
  298. var tb=_3d.textbox;
  299. var _3f=tb.find(".textbox-text");
  300. _3e.readonly=_3c==undefined?true:_3c;
  301. if(_3e.readonly){
  302. _3f.triggerHandler("blur.textbox");
  303. }
  304. _3f.validatebox("readonly",_3e.readonly);
  305. tb.removeClass("textbox-readonly").addClass(_3e.readonly?"textbox-readonly":"");
  306. };
  307. $.fn.textbox=function(_40,_41){
  308. if(typeof _40=="string"){
  309. var _42=$.fn.textbox.methods[_40];
  310. if(_42){
  311. return _42(this,_41);
  312. }else{
  313. return this.each(function(){
  314. var _43=$(this).textbox("textbox");
  315. _43.validatebox(_40,_41);
  316. });
  317. }
  318. }
  319. _40=_40||{};
  320. return this.each(function(){
  321. var _44=$.data(this,"textbox");
  322. if(_44){
  323. $.extend(_44.options,_40);
  324. if(_40.value!=undefined){
  325. _44.options.originalValue=_40.value;
  326. }
  327. }else{
  328. _44=$.data(this,"textbox",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_40),textbox:_2(this)});
  329. _44.options.originalValue=_44.options.value;
  330. }
  331. _6(this);
  332. _28(this);
  333. if(_44.options.doSize){
  334. _12(this);
  335. }
  336. var _45=_44.options.value;
  337. _44.options.value="";
  338. $(this).textbox("initValue",_45);
  339. });
  340. };
  341. $.fn.textbox.methods={options:function(jq){
  342. return $.data(jq[0],"textbox").options;
  343. },cloneFrom:function(jq,_46){
  344. return jq.each(function(){
  345. var t=$(this);
  346. if(t.data("textbox")){
  347. return;
  348. }
  349. if(!$(_46).data("textbox")){
  350. $(_46).textbox();
  351. }
  352. var _47=$.extend(true,{},$(_46).textbox("options"));
  353. var _48=t.attr("name")||"";
  354. t.addClass("textbox-f").hide();
  355. t.removeAttr("name").attr("textboxName",_48);
  356. var _49=$(_46).next().clone().insertAfter(t);
  357. var _4a="_easyui_textbox_input"+(++_1);
  358. _49.find(".textbox-value").attr("name",_48);
  359. _49.find(".textbox-text").attr("id",_4a);
  360. var _4b=$($(_46).textbox("label")).clone();
  361. if(_4b.length){
  362. _4b.attr("for",_4a);
  363. if(_47.labelPosition=="after"){
  364. _4b.insertAfter(t.next());
  365. }else{
  366. _4b.insertBefore(t);
  367. }
  368. }
  369. $.data(this,"textbox",{options:_47,textbox:_49,label:(_4b.length?_4b:undefined)});
  370. var _4c=$(_46).textbox("button");
  371. if(_4c.length){
  372. t.textbox("button").linkbutton($.extend(true,{},_4c.linkbutton("options")));
  373. }
  374. _28(this);
  375. _c(this);
  376. });
  377. },textbox:function(jq){
  378. return $.data(jq[0],"textbox").textbox.find(".textbox-text");
  379. },button:function(jq){
  380. return $.data(jq[0],"textbox").textbox.find(".textbox-button");
  381. },label:function(jq){
  382. return $.data(jq[0],"textbox").label;
  383. },destroy:function(jq){
  384. return jq.each(function(){
  385. _f(this);
  386. });
  387. },resize:function(jq,_4d){
  388. return jq.each(function(){
  389. _12(this,_4d);
  390. });
  391. },disable:function(jq){
  392. return jq.each(function(){
  393. _d(this,true);
  394. _28(this);
  395. });
  396. },enable:function(jq){
  397. return jq.each(function(){
  398. _d(this,false);
  399. _28(this);
  400. });
  401. },readonly:function(jq,_4e){
  402. return jq.each(function(){
  403. _e(this,_4e);
  404. _28(this);
  405. });
  406. },isValid:function(jq){
  407. return jq.textbox("textbox").validatebox("isValid");
  408. },clear:function(jq){
  409. return jq.each(function(){
  410. $(this).textbox("setValue","");
  411. });
  412. },setText:function(jq,_4f){
  413. return jq.each(function(){
  414. var _50=$(this).textbox("options");
  415. var _51=$(this).textbox("textbox");
  416. _4f=_4f==undefined?"":String(_4f);
  417. if($(this).textbox("getText")!=_4f){
  418. _51.val(_4f);
  419. }
  420. _50.value=_4f;
  421. if(!_51.is(":focus")){
  422. if(_4f){
  423. _51.removeClass("textbox-prompt");
  424. }else{
  425. _51.val(_50.prompt).addClass("textbox-prompt");
  426. }
  427. }
  428. if(_50.value){
  429. $(this).closest(".form-field").removeClass("form-field-empty");
  430. }else{
  431. $(this).closest(".form-field").addClass("form-field-empty");
  432. }
  433. $(this).textbox("validate");
  434. });
  435. },initValue:function(jq,_52){
  436. return jq.each(function(){
  437. var _53=$.data(this,"textbox");
  438. $(this).textbox("setText",_52);
  439. _53.textbox.find(".textbox-value").val(_52);
  440. $(this).val(_52);
  441. });
  442. },setValue:function(jq,_54){
  443. return jq.each(function(){
  444. var _55=$.data(this,"textbox").options;
  445. var _56=$(this).textbox("getValue");
  446. $(this).textbox("initValue",_54);
  447. if(_56!=_54){
  448. _55.onChange.call(this,_54,_56);
  449. $(this).closest("form").trigger("_change",[this]);
  450. }
  451. });
  452. },getText:function(jq){
  453. var _57=jq.textbox("textbox");
  454. if(_57.is(":focus")){
  455. return _57.val();
  456. }else{
  457. return jq.textbox("options").value;
  458. }
  459. },getValue:function(jq){
  460. return jq.data("textbox").textbox.find(".textbox-value").val();
  461. },reset:function(jq){
  462. return jq.each(function(){
  463. var _58=$(this).textbox("options");
  464. $(this).textbox("textbox").val(_58.originalValue);
  465. $(this).textbox("setValue",_58.originalValue);
  466. });
  467. },getIcon:function(jq,_59){
  468. return jq.data("textbox").textbox.find(".textbox-icon:eq("+_59+")");
  469. },getTipX:function(jq,_5a){
  470. var _5b=jq.data("textbox");
  471. var _5c=_5b.options;
  472. var tb=_5b.textbox;
  473. var _5d=tb.find(".textbox-text");
  474. var _5a=_5a||_5c.tipPosition;
  475. var p1=tb.offset();
  476. var p2=_5d.offset();
  477. var w1=tb.outerWidth();
  478. var w2=_5d.outerWidth();
  479. if(_5a=="right"){
  480. return w1-w2-p2.left+p1.left;
  481. }else{
  482. if(_5a=="left"){
  483. return p1.left-p2.left;
  484. }else{
  485. return (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2;
  486. }
  487. }
  488. },getTipY:function(jq,_5e){
  489. var _5f=jq.data("textbox");
  490. var _60=_5f.options;
  491. var tb=_5f.textbox;
  492. var _61=tb.find(".textbox-text");
  493. var _5e=_5e||_60.tipPosition;
  494. var p1=tb.offset();
  495. var p2=_61.offset();
  496. var h1=tb.outerHeight();
  497. var h2=_61.outerHeight();
  498. if(_5e=="left"||_5e=="right"){
  499. return (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2;
  500. }else{
  501. if(_5e=="bottom"){
  502. return (h1-h2-p2.top+p1.top);
  503. }else{
  504. return (p1.top-p2.top);
  505. }
  506. }
  507. },getSelectionStart:function(jq){
  508. return jq.textbox("getSelectionRange").start;
  509. },getSelectionRange:function(jq){
  510. var _62=jq.textbox("textbox")[0];
  511. var _63=0;
  512. var end=0;
  513. if(typeof _62.selectionStart=="number"){
  514. _63=_62.selectionStart;
  515. end=_62.selectionEnd;
  516. }else{
  517. if(_62.createTextRange){
  518. var s=document.selection.createRange();
  519. var _64=_62.createTextRange();
  520. _64.setEndPoint("EndToStart",s);
  521. _63=_64.text.length;
  522. end=_63+s.text.length;
  523. }
  524. }
  525. return {start:_63,end:end};
  526. },setSelectionRange:function(jq,_65){
  527. return jq.each(function(){
  528. var _66=$(this).textbox("textbox")[0];
  529. var _67=_65.start;
  530. var end=_65.end;
  531. if(_66.setSelectionRange){
  532. _66.setSelectionRange(_67,end);
  533. }else{
  534. if(_66.createTextRange){
  535. var _68=_66.createTextRange();
  536. _68.collapse();
  537. _68.moveEnd("character",end);
  538. _68.moveStart("character",_67);
  539. _68.select();
  540. }
  541. }
  542. });
  543. }};
  544. $.fn.textbox.parseOptions=function(_69){
  545. var t=$(_69);
  546. return $.extend({},$.fn.validatebox.parseOptions(_69),$.parser.parseOptions(_69,["prompt","iconCls","iconAlign","buttonText","buttonIcon","buttonAlign","label","labelPosition","labelAlign",{multiline:"boolean",iconWidth:"number",labelWidth:"number"}]),{value:(t.val()||undefined),type:(t.attr("type")?t.attr("type"):undefined)});
  547. };
  548. $.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:"auto",height:"auto",cls:null,prompt:"",value:"",type:"text",multiline:false,icons:[],iconCls:null,iconAlign:"right",iconWidth:26,buttonText:"",buttonIcon:null,buttonAlign:"right",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",inputEvents:{blur:function(e){
  549. var t=$(e.data.target);
  550. var _6a=t.textbox("options");
  551. if(t.textbox("getValue")!=_6a.value){
  552. t.textbox("setValue",_6a.value);
  553. }
  554. },keydown:function(e){
  555. if(e.keyCode==13){
  556. var t=$(e.data.target);
  557. t.textbox("setValue",t.textbox("getText"));
  558. }
  559. }},onChange:function(_6b,_6c){
  560. },onResizing:function(_6d,_6e){
  561. },onResize:function(_6f,_70){
  562. },onClickButton:function(){
  563. },onClickIcon:function(_71){
  564. }});
  565. })(jQuery);