jquery.textbox.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. /**
  2. * jQuery EasyUI 1.5.2
  3. *
  4. * Copyright (c) 2009-2017 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. }).bind("focus.textbox",function(e){
  229. _2b.hasFocusMe=true;
  230. if(tb.hasClass("textbox-focused")){
  231. return;
  232. }
  233. if($(this).val()!=_2b.value){
  234. $(this).val(_2b.value);
  235. }
  236. $(this).removeClass("textbox-prompt");
  237. tb.addClass("textbox-focused");
  238. });
  239. for(var _2d in _2b.inputEvents){
  240. _2c.bind(_2d+".textbox",{target:_29},_2b.inputEvents[_2d]);
  241. }
  242. }
  243. var _2e=tb.find(".textbox-addon");
  244. _2e.unbind().bind("click",{target:_29},function(e){
  245. var _2f=$(e.target).closest("a.textbox-icon:not(.textbox-icon-disabled)");
  246. if(_2f.length){
  247. var _30=parseInt(_2f.attr("icon-index"));
  248. var _31=_2b.icons[_30];
  249. if(_31&&_31.handler){
  250. _31.handler.call(_2f[0],e);
  251. }
  252. _2b.onClickIcon.call(_29,_30);
  253. }
  254. });
  255. _2e.find(".textbox-icon").each(function(_32){
  256. var _33=_2b.icons[_32];
  257. var _34=$(this);
  258. if(!_33||_33.disabled||_2b.disabled||_2b.readonly){
  259. _34.addClass("textbox-icon-disabled");
  260. }else{
  261. _34.removeClass("textbox-icon-disabled");
  262. }
  263. });
  264. var btn=tb.find(".textbox-button");
  265. btn.linkbutton((_2b.disabled||_2b.readonly)?"disable":"enable");
  266. tb.unbind(".textbox").bind("_resize.textbox",function(e,_35){
  267. if($(this).hasClass("easyui-fluid")||_35){
  268. _12(_29);
  269. }
  270. return false;
  271. });
  272. };
  273. function _d(_36,_37){
  274. var _38=$.data(_36,"textbox");
  275. var _39=_38.options;
  276. var tb=_38.textbox;
  277. var _3a=tb.find(".textbox-text");
  278. var ss=$(_36).add(tb.find(".textbox-value"));
  279. _39.disabled=_37;
  280. if(_39.disabled){
  281. _3a.blur();
  282. _3a.validatebox("disable");
  283. tb.addClass("textbox-disabled");
  284. ss.attr("disabled","disabled");
  285. $(_38.label).addClass("textbox-label-disabled");
  286. }else{
  287. _3a.validatebox("enable");
  288. tb.removeClass("textbox-disabled");
  289. ss.removeAttr("disabled");
  290. $(_38.label).removeClass("textbox-label-disabled");
  291. }
  292. };
  293. function _e(_3b,_3c){
  294. var _3d=$.data(_3b,"textbox");
  295. var _3e=_3d.options;
  296. var tb=_3d.textbox;
  297. var _3f=tb.find(".textbox-text");
  298. _3e.readonly=_3c==undefined?true:_3c;
  299. if(_3e.readonly){
  300. _3f.triggerHandler("blur.textbox");
  301. }
  302. _3f.validatebox("readonly",_3e.readonly);
  303. tb.removeClass("textbox-readonly").addClass(_3e.readonly?"textbox-readonly":"");
  304. };
  305. $.fn.textbox=function(_40,_41){
  306. if(typeof _40=="string"){
  307. var _42=$.fn.textbox.methods[_40];
  308. if(_42){
  309. return _42(this,_41);
  310. }else{
  311. return this.each(function(){
  312. var _43=$(this).textbox("textbox");
  313. _43.validatebox(_40,_41);
  314. });
  315. }
  316. }
  317. _40=_40||{};
  318. return this.each(function(){
  319. var _44=$.data(this,"textbox");
  320. if(_44){
  321. $.extend(_44.options,_40);
  322. if(_40.value!=undefined){
  323. _44.options.originalValue=_40.value;
  324. }
  325. }else{
  326. _44=$.data(this,"textbox",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_40),textbox:_2(this)});
  327. _44.options.originalValue=_44.options.value;
  328. }
  329. _6(this);
  330. _28(this);
  331. if(_44.options.doSize){
  332. _12(this);
  333. }
  334. var _45=_44.options.value;
  335. _44.options.value="";
  336. $(this).textbox("initValue",_45);
  337. });
  338. };
  339. $.fn.textbox.methods={options:function(jq){
  340. return $.data(jq[0],"textbox").options;
  341. },cloneFrom:function(jq,_46){
  342. return jq.each(function(){
  343. var t=$(this);
  344. if(t.data("textbox")){
  345. return;
  346. }
  347. if(!$(_46).data("textbox")){
  348. $(_46).textbox();
  349. }
  350. var _47=$.extend(true,{},$(_46).textbox("options"));
  351. var _48=t.attr("name")||"";
  352. t.addClass("textbox-f").hide();
  353. t.removeAttr("name").attr("textboxName",_48);
  354. var _49=$(_46).next().clone().insertAfter(t);
  355. var _4a="_easyui_textbox_input"+(++_1);
  356. _49.find(".textbox-value").attr("name",_48);
  357. _49.find(".textbox-text").attr("id",_4a);
  358. var _4b=$($(_46).textbox("label")).clone();
  359. if(_4b.length){
  360. _4b.attr("for",_4a);
  361. if(_47.labelPosition=="after"){
  362. _4b.insertAfter(t.next());
  363. }else{
  364. _4b.insertBefore(t);
  365. }
  366. }
  367. $.data(this,"textbox",{options:_47,textbox:_49,label:(_4b.length?_4b:undefined)});
  368. var _4c=$(_46).textbox("button");
  369. if(_4c.length){
  370. t.textbox("button").linkbutton($.extend(true,{},_4c.linkbutton("options")));
  371. }
  372. _28(this);
  373. _c(this);
  374. });
  375. },textbox:function(jq){
  376. return $.data(jq[0],"textbox").textbox.find(".textbox-text");
  377. },button:function(jq){
  378. return $.data(jq[0],"textbox").textbox.find(".textbox-button");
  379. },label:function(jq){
  380. return $.data(jq[0],"textbox").label;
  381. },destroy:function(jq){
  382. return jq.each(function(){
  383. _f(this);
  384. });
  385. },resize:function(jq,_4d){
  386. return jq.each(function(){
  387. _12(this,_4d);
  388. });
  389. },disable:function(jq){
  390. return jq.each(function(){
  391. _d(this,true);
  392. _28(this);
  393. });
  394. },enable:function(jq){
  395. return jq.each(function(){
  396. _d(this,false);
  397. _28(this);
  398. });
  399. },readonly:function(jq,_4e){
  400. return jq.each(function(){
  401. _e(this,_4e);
  402. _28(this);
  403. });
  404. },isValid:function(jq){
  405. return jq.textbox("textbox").validatebox("isValid");
  406. },clear:function(jq){
  407. return jq.each(function(){
  408. $(this).textbox("setValue","");
  409. });
  410. },setText:function(jq,_4f){
  411. return jq.each(function(){
  412. var _50=$(this).textbox("options");
  413. var _51=$(this).textbox("textbox");
  414. _4f=_4f==undefined?"":String(_4f);
  415. if($(this).textbox("getText")!=_4f){
  416. _51.val(_4f);
  417. }
  418. _50.value=_4f;
  419. if(!_51.is(":focus")){
  420. if(_4f){
  421. _51.removeClass("textbox-prompt");
  422. }else{
  423. _51.val(_50.prompt).addClass("textbox-prompt");
  424. }
  425. }
  426. $(this).textbox("validate");
  427. });
  428. },initValue:function(jq,_52){
  429. return jq.each(function(){
  430. var _53=$.data(this,"textbox");
  431. $(this).textbox("setText",_52);
  432. _53.textbox.find(".textbox-value").val(_52);
  433. $(this).val(_52);
  434. });
  435. },setValue:function(jq,_54){
  436. return jq.each(function(){
  437. var _55=$.data(this,"textbox").options;
  438. var _56=$(this).textbox("getValue");
  439. $(this).textbox("initValue",_54);
  440. if(_56!=_54){
  441. _55.onChange.call(this,_54,_56);
  442. $(this).closest("form").trigger("_change",[this]);
  443. }
  444. });
  445. },getText:function(jq){
  446. var _57=jq.textbox("textbox");
  447. if(_57.is(":focus")){
  448. return _57.val();
  449. }else{
  450. return jq.textbox("options").value;
  451. }
  452. },getValue:function(jq){
  453. return jq.data("textbox").textbox.find(".textbox-value").val();
  454. },reset:function(jq){
  455. return jq.each(function(){
  456. var _58=$(this).textbox("options");
  457. $(this).textbox("textbox").val(_58.originalValue);
  458. $(this).textbox("setValue",_58.originalValue);
  459. });
  460. },getIcon:function(jq,_59){
  461. return jq.data("textbox").textbox.find(".textbox-icon:eq("+_59+")");
  462. },getTipX:function(jq,_5a){
  463. var _5b=jq.data("textbox");
  464. var _5c=_5b.options;
  465. var tb=_5b.textbox;
  466. var _5d=tb.find(".textbox-text");
  467. var _5a=_5a||_5c.tipPosition;
  468. var p1=tb.offset();
  469. var p2=_5d.offset();
  470. var w1=tb.outerWidth();
  471. var w2=_5d.outerWidth();
  472. if(_5a=="right"){
  473. return w1-w2-p2.left+p1.left;
  474. }else{
  475. if(_5a=="left"){
  476. return p1.left-p2.left;
  477. }else{
  478. return (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2;
  479. }
  480. }
  481. },getTipY:function(jq,_5e){
  482. var _5f=jq.data("textbox");
  483. var _60=_5f.options;
  484. var tb=_5f.textbox;
  485. var _61=tb.find(".textbox-text");
  486. var _5e=_5e||_60.tipPosition;
  487. var p1=tb.offset();
  488. var p2=_61.offset();
  489. var h1=tb.outerHeight();
  490. var h2=_61.outerHeight();
  491. if(_5e=="left"||_5e=="right"){
  492. return (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2;
  493. }else{
  494. if(_5e=="bottom"){
  495. return (h1-h2-p2.top+p1.top);
  496. }else{
  497. return (p1.top-p2.top);
  498. }
  499. }
  500. },getSelectionStart:function(jq){
  501. return jq.textbox("getSelectionRange").start;
  502. },getSelectionRange:function(jq){
  503. var _62=jq.textbox("textbox")[0];
  504. var _63=0;
  505. var end=0;
  506. if(typeof _62.selectionStart=="number"){
  507. _63=_62.selectionStart;
  508. end=_62.selectionEnd;
  509. }else{
  510. if(_62.createTextRange){
  511. var s=document.selection.createRange();
  512. var _64=_62.createTextRange();
  513. _64.setEndPoint("EndToStart",s);
  514. _63=_64.text.length;
  515. end=_63+s.text.length;
  516. }
  517. }
  518. return {start:_63,end:end};
  519. },setSelectionRange:function(jq,_65){
  520. return jq.each(function(){
  521. var _66=$(this).textbox("textbox")[0];
  522. var _67=_65.start;
  523. var end=_65.end;
  524. if(_66.setSelectionRange){
  525. _66.setSelectionRange(_67,end);
  526. }else{
  527. if(_66.createTextRange){
  528. var _68=_66.createTextRange();
  529. _68.collapse();
  530. _68.moveEnd("character",end);
  531. _68.moveStart("character",_67);
  532. _68.select();
  533. }
  534. }
  535. });
  536. }};
  537. $.fn.textbox.parseOptions=function(_69){
  538. var t=$(_69);
  539. 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)});
  540. };
  541. $.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:18,buttonText:"",buttonIcon:null,buttonAlign:"right",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",inputEvents:{blur:function(e){
  542. var t=$(e.data.target);
  543. var _6a=t.textbox("options");
  544. if(t.textbox("getValue")!=_6a.value){
  545. t.textbox("setValue",_6a.value);
  546. }
  547. },keydown:function(e){
  548. if(e.keyCode==13){
  549. var t=$(e.data.target);
  550. t.textbox("setValue",t.textbox("getText"));
  551. }
  552. }},onChange:function(_6b,_6c){
  553. },onResizing:function(_6d,_6e){
  554. },onResize:function(_6f,_70){
  555. },onClickButton:function(){
  556. },onClickIcon:function(_71){
  557. }});
  558. })(jQuery);