ligerForm.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /**
  2. * jQuery ligerUI 1.1.9
  3. *
  4. * http://ligerui.com
  5. *
  6. * Author daomi 2012 [ gd_star@163.com ]
  7. *
  8. */
  9. (function ($)
  10. {
  11. $.fn.ligerForm = function ()
  12. {
  13. return $.ligerui.run.call(this, "ligerForm", arguments);
  14. };
  15. $.ligerDefaults = $.ligerDefaults || {};
  16. $.ligerDefaults.Form = {
  17. //控件宽度
  18. inputWidth: 180,
  19. //标签宽度
  20. labelWidth: 90,
  21. //间隔宽度
  22. space: 40,
  23. rightToken: ':',
  24. //标签对齐方式
  25. labelAlign: 'left',
  26. //控件对齐方式
  27. align: 'left',
  28. //字段
  29. fields: [],
  30. //创建的表单元素是否附加ID
  31. appendID: true,
  32. //生成表单元素ID的前缀
  33. prefixID: "",
  34. //json解析函数
  35. toJSON: $.ligerui.toJSON
  36. };
  37. //@description 默认表单编辑器构造器扩展(如果创建的表单效果不满意 建议重载)
  38. //@param {jinput} 表单元素jQuery对象 比如input、select、textarea
  39. $.ligerDefaults.Form.editorBulider = function (jinput)
  40. {
  41. //这里this就是form的ligerui对象
  42. var g = this, p = this.options;
  43. var inputOptions = {};
  44. if (p.inputWidth) inputOptions.width = p.inputWidth;
  45. if (jinput.is("select"))
  46. {
  47. jinput.ligerComboBox(inputOptions);
  48. }
  49. else if (jinput.is(":text") || jinput.is(":password"))
  50. {
  51. var ltype = jinput.attr("ltype");
  52. switch (ltype)
  53. {
  54. case "select":
  55. case "combobox":
  56. jinput.ligerComboBox(inputOptions);
  57. break;
  58. case "spinner":
  59. jinput.ligerSpinner(inputOptions);
  60. break;
  61. case "date":
  62. jinput.ligerDateEditor(inputOptions);
  63. break;
  64. case "float":
  65. case "number":
  66. inputOptions.number = true;
  67. jinput.ligerTextBox(inputOptions);
  68. break;
  69. case "int":
  70. case "digits":
  71. inputOptions.digits = true;
  72. default:
  73. jinput.ligerTextBox(inputOptions);
  74. break;
  75. }
  76. }
  77. else if (jinput.is(":radio"))
  78. {
  79. jinput.ligerRadio(inputOptions);
  80. }
  81. else if (jinput.is(":checkbox"))
  82. {
  83. jinput.ligerCheckBox(inputOptions);
  84. }
  85. else if (jinput.is("textarea"))
  86. {
  87. jinput.addClass("l-textarea");
  88. }
  89. }
  90. //表单组件
  91. $.ligerui.controls.Form = function (element, options)
  92. {
  93. $.ligerui.controls.Form.base.constructor.call(this, element, options);
  94. };
  95. $.ligerui.controls.Form.ligerExtend($.ligerui.core.UIComponent, {
  96. __getType: function ()
  97. {
  98. return 'Form'
  99. },
  100. __idPrev: function ()
  101. {
  102. return 'Form';
  103. },
  104. _init: function ()
  105. {
  106. $.ligerui.controls.Form.base._init.call(this);
  107. },
  108. _render: function ()
  109. {
  110. var g = this, p = this.options;
  111. var jform = $(this.element);
  112. //自动创建表单
  113. if (p.fields && p.fields.length)
  114. {
  115. if (!jform.hasClass("l-form"))
  116. jform.addClass("l-form");
  117. var out = [];
  118. var appendULStartTag = false;
  119. $(p.fields).each(function (index, field)
  120. {
  121. var name = field.name || field.id;
  122. if (!name) return;
  123. if (field.type == "hidden")
  124. {
  125. out.push('<input type="hidden" id="' + name + '" name="' + name + '" />');
  126. return;
  127. }
  128. var newLine = field.renderToNewLine || field.newline;
  129. if (newLine == null) newLine = true;
  130. if (field.merge) newLine = false;
  131. if (field.group) newLine = true;
  132. if (newLine)
  133. {
  134. if (appendULStartTag)
  135. {
  136. out.push('</ul>');
  137. appendULStartTag = false;
  138. }
  139. if (field.group)
  140. {
  141. out.push('<div class="l-group');
  142. if (field.groupicon)
  143. out.push(' l-group-hasicon');
  144. out.push('">');
  145. if (field.groupicon)
  146. out.push('<img src="' + field.groupicon + '" />');
  147. out.push('<span>' + field.group + '</span></div>');
  148. }
  149. out.push('<ul>');
  150. appendULStartTag = true;
  151. }
  152. //append label
  153. out.push(g._buliderLabelContainer(field));
  154. //append input
  155. out.push(g._buliderControlContainer(field));
  156. //append space
  157. out.push(g._buliderSpaceContainer(field));
  158. });
  159. if (appendULStartTag)
  160. {
  161. out.push('</ul>');
  162. appendULStartTag = false;
  163. }
  164. jform.append(out.join(''));
  165. }
  166. //生成ligerui表单样式
  167. $("input,select,textarea", jform).each(function ()
  168. {
  169. p.editorBulider.call(g, $(this));
  170. });
  171. },
  172. //标签部分
  173. _buliderLabelContainer: function (field)
  174. {
  175. var g = this, p = this.options;
  176. var label = field.label || field.display;
  177. var labelWidth = field.labelWidth || field.labelwidth || p.labelWidth;
  178. var labelAlign = field.labelAlign || p.labelAlign;
  179. if (label) label += p.rightToken;
  180. var out = [];
  181. out.push('<li style="');
  182. if (labelWidth)
  183. {
  184. out.push('width:' + labelWidth + 'px;');
  185. }
  186. if (labelAlign)
  187. {
  188. out.push('text-align:' + labelAlign + ';');
  189. }
  190. out.push('">');
  191. if (label)
  192. {
  193. out.push(label);
  194. }
  195. out.push('</li>');
  196. return out.join('');
  197. },
  198. //控件部分
  199. _buliderControlContainer: function (field)
  200. {
  201. var g = this, p = this.options;
  202. var width = field.width || p.inputWidth;
  203. var align = field.align || field.textAlign || field.textalign || p.align;
  204. var out = [];
  205. out.push('<li style="');
  206. if (width)
  207. {
  208. out.push('width:' + width + 'px;');
  209. }
  210. if (align)
  211. {
  212. out.push('text-align:' + align + ';');
  213. }
  214. out.push('">');
  215. out.push(g._buliderControl(field));
  216. out.push('</li>');
  217. return out.join('');
  218. },
  219. //间隔部分
  220. _buliderSpaceContainer: function (field)
  221. {
  222. var g = this, p = this.options;
  223. var spaceWidth = field.space || field.spaceWidth || p.space;
  224. var out = [];
  225. out.push('<li style="');
  226. if (spaceWidth)
  227. {
  228. out.push('width:' + spaceWidth + 'px;');
  229. }
  230. out.push('">');
  231. out.push('</li>');
  232. return out.join('');
  233. },
  234. _buliderControl: function (field)
  235. {
  236. var g = this, p = this.options;
  237. var width = field.width || p.inputWidth;
  238. var name = field.name || field.id;
  239. var out = [];
  240. if (field.comboboxName && field.type == "select")
  241. {
  242. out.push('<input type="hidden" id="' + p.prefixID + name + '" name="' + name + '" />');
  243. }
  244. if (field.textarea || field.type == "textarea")
  245. {
  246. out.push('<textarea ');
  247. }
  248. else if (field.type == "checkbox")
  249. {
  250. out.push('<input type="checkbox" ');
  251. }
  252. else if (field.type == "radio")
  253. {
  254. out.push('<input type="radio" ');
  255. }
  256. else if (field.type == "password")
  257. {
  258. out.push('<input type="password" ');
  259. }
  260. else
  261. {
  262. out.push('<input type="text" ');
  263. }
  264. if (field.cssClass)
  265. {
  266. out.push('class="' + field.cssClass + '" ');
  267. }
  268. if (field.type)
  269. {
  270. out.push('ltype="' + field.type + '" ');
  271. }
  272. if (field.attr)
  273. {
  274. for (var attrp in field.attr)
  275. {
  276. out.push(attrp + '="' + field.attr[attrp] + '" ');
  277. }
  278. }
  279. if (field.comboboxName && field.type == "select")
  280. {
  281. out.push('name="' + field.comboboxName + '"');
  282. if (p.appendID)
  283. {
  284. out.push(' id="' + p.prefixID + field.comboboxName + '" ');
  285. }
  286. }
  287. else
  288. {
  289. out.push('name="' + name + '"');
  290. if (p.appendID)
  291. {
  292. out.push(' id="' + name + '" ');
  293. }
  294. }
  295. //参数
  296. var fieldOptions = $.extend({
  297. width: width - 2
  298. }, field.options || {});
  299. out.push(" ligerui='" + p.toJSON(fieldOptions) + "' ");
  300. //验证参数
  301. if (field.validate)
  302. {
  303. out.push(" validate='" + p.toJSON(field.validate) + "' ");
  304. }
  305. out.push(' />');
  306. return out.join('');
  307. }
  308. });
  309. })(jQuery);