Form.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.widget.Form");
  9. dojo.require("dojo.widget.*");
  10. dojo.require("dojo.widget.HtmlWidget");
  11. dojo.widget.defineWidget("dojo.widget.Form", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onSubmit:onSubmit'></form>", formElements:[], ignoreNullValues:false, postCreate:function (args, frag) {
  12. for (var key in args) {
  13. if (key == "dojotype") {
  14. continue;
  15. }
  16. var attr = document.createAttribute(key);
  17. attr.nodeValue = args[key];
  18. this.containerNode.setAttributeNode(attr);
  19. }
  20. }, _createRepeaters:function (obj, widget) {
  21. for (var i = 0; i < widget.children.length; ++i) {
  22. if (widget.children[i].widgetType == "RepeaterContainer") {
  23. var rIndex = widget.children[i].index;
  24. var rIndexPos = rIndex.indexOf("%{index}");
  25. rIndex = rIndex.substr(0, rIndexPos - 1);
  26. var myObj = this._getObject(obj, rIndex);
  27. if (typeof (myObj) == "object" && myObj.length == 0) {
  28. myObj = new Array();
  29. }
  30. var rowCount = widget.children[i].getRowCount();
  31. for (var j = 0, len = rowCount; j < len; ++j) {
  32. widget.children[i].deleteRow(0);
  33. }
  34. for (var j = 0; j < myObj.length; j++) {
  35. widget.children[i].addRow(false);
  36. }
  37. }
  38. if (widget.children[i].isContainer) {
  39. this._createRepeaters(obj, widget.children[i]);
  40. }
  41. }
  42. }, _createFormElements:function () {
  43. if (dojo.render.html.safari) {
  44. this.formElements = [];
  45. var elems = ["INPUT", "SELECT", "TEXTAREA"];
  46. for (var k = 0; k < elems.length; k++) {
  47. var list = this.containerNode.getElementsByTagName(elems[k]);
  48. for (var j = 0, len2 = list.length; j < len2; j++) {
  49. this.formElements.push(list[j]);
  50. }
  51. }
  52. } else {
  53. this.formElements = this.containerNode.elements;
  54. }
  55. }, onSubmit:function (e) {
  56. e.preventDefault();
  57. }, submit:function () {
  58. this.containerNode.submit();
  59. }, _getFormElement:function (name) {
  60. if (dojo.render.html.ie) {
  61. for (var i = 0, len = this.formElements.length; i < len; i++) {
  62. var element = this.formElements[i];
  63. if (element.name == name) {
  64. return element;
  65. }
  66. }
  67. } else {
  68. var elem = this.formElements[name];
  69. if (typeof (elem) != "undefined") {
  70. return elem;
  71. }
  72. }
  73. return null;
  74. }, _getObject:function (obj, searchString) {
  75. var namePath = [];
  76. namePath = searchString.split(".");
  77. var myObj = obj;
  78. var name = namePath[namePath.length - 1];
  79. for (var j = 0, len = namePath.length; j < len; ++j) {
  80. var p = namePath[j];
  81. if (typeof (myObj[p]) == "undefined") {
  82. myObj[p] = {};
  83. }
  84. myObj = myObj[p];
  85. }
  86. return myObj;
  87. }, _setToContainers:function (obj, widget) {
  88. for (var i = 0, len = widget.children.length; i < len; ++i) {
  89. var currentWidget = widget.children[i];
  90. if (currentWidget.widgetType == "Repeater") {
  91. for (var j = 0, len = currentWidget.getRowCount(); j < len; ++j) {
  92. currentWidget._initRow(j);
  93. }
  94. }
  95. if (currentWidget.isContainer) {
  96. this._setToContainers(obj, currentWidget);
  97. continue;
  98. }
  99. switch (currentWidget.widgetType) {
  100.   case "Checkbox":
  101. currentWidget.setValue(currentWidget.inputNode.checked);
  102. break;
  103.   case "DropdownDatePicker":
  104. currentWidget.setValue(currentWidget.getValue());
  105. break;
  106.   case "Select":
  107. continue;
  108. break;
  109.   case "ComboBox":
  110. continue;
  111. break;
  112.   default:
  113. break;
  114. }
  115. }
  116. }, setValues:function (obj) {
  117. this._createFormElements();
  118. this._createRepeaters(obj, this);
  119. for (var i = 0, len = this.formElements.length; i < len; i++) {
  120. var element = this.formElements[i];
  121. if (element.name == "") {
  122. continue;
  123. }
  124. var namePath = new Array();
  125. namePath = element.name.split(".");
  126. var myObj = obj;
  127. var name = namePath[namePath.length - 1];
  128. for (var j = 1, len2 = namePath.length; j < len2; ++j) {
  129. var p = namePath[j - 1];
  130. if (typeof (myObj[p]) == "undefined") {
  131. myObj = undefined;
  132. break;
  133. }
  134. myObj = myObj[p];
  135. }
  136. if (typeof (myObj) == "undefined") {
  137. continue;
  138. }
  139. if (typeof (myObj[name]) == "undefined" && this.ignoreNullValues) {
  140. continue;
  141. }
  142. var type = element.type;
  143. if (type == "hidden" || type == "text" || type == "textarea" || type == "password") {
  144. type = "text";
  145. }
  146. switch (type) {
  147.   case "checkbox":
  148. element.checked = false;
  149. if (typeof (myObj[name]) == "undefined") {
  150. continue;
  151. }
  152. for (var j = 0, len2 = myObj[name].length; j < len2; ++j) {
  153. if (element.value == myObj[name][j]) {
  154. element.checked = true;
  155. }
  156. }
  157. break;
  158.   case "radio":
  159. element.checked = false;
  160. if (typeof (myObj[name]) == "undefined") {
  161. continue;
  162. }
  163. if (myObj[name] == element.value) {
  164. element.checked = true;
  165. }
  166. break;
  167.   case "select-multiple":
  168. element.selectedIndex = -1;
  169. for (var j = 0, len2 = element.options.length; j < len2; ++j) {
  170. for (var k = 0, len3 = myObj[name].length; k < len3; ++k) {
  171. if (element.options[j].value == myObj[name][k]) {
  172. element.options[j].selected = true;
  173. }
  174. }
  175. }
  176. break;
  177.   case "select-one":
  178. element.selectedIndex = "0";
  179. for (var j = 0, len2 = element.options.length; j < len2; ++j) {
  180. if (element.options[j].value == myObj[name]) {
  181. element.options[j].selected = true;
  182. } else {
  183. }
  184. }
  185. break;
  186.   case "text":
  187. var value = "";
  188. if (typeof (myObj[name]) != "undefined") {
  189. value = myObj[name];
  190. }
  191. element.value = value;
  192. break;
  193.   default:
  194. dojo.debug("Not supported type (" + type + ")");
  195. break;
  196. }
  197. }
  198. this._setToContainers(obj, this);
  199. }, getValues:function () {
  200. this._createFormElements();
  201. var obj = {};
  202. for (var i = 0, len = this.formElements.length; i < len; i++) {
  203. var elm = this.formElements[i];
  204. var namePath = [];
  205. if (elm.name == "") {
  206. continue;
  207. }
  208. namePath = elm.name.split(".");
  209. var myObj = obj;
  210. var name = namePath[namePath.length - 1];
  211. for (var j = 1, len2 = namePath.length; j < len2; ++j) {
  212. var nameIndex = null;
  213. var p = namePath[j - 1];
  214. var nameA = p.split("[");
  215. if (nameA.length > 1) {
  216. if (typeof (myObj[nameA[0]]) == "undefined") {
  217. myObj[nameA[0]] = [];
  218. }
  219. nameIndex = parseInt(nameA[1]);
  220. if (typeof (myObj[nameA[0]][nameIndex]) == "undefined") {
  221. myObj[nameA[0]][nameIndex] = {};
  222. }
  223. } else {
  224. if (typeof (myObj[nameA[0]]) == "undefined") {
  225. myObj[nameA[0]] = {};
  226. }
  227. }
  228. if (nameA.length == 1) {
  229. myObj = myObj[nameA[0]];
  230. } else {
  231. myObj = myObj[nameA[0]][nameIndex];
  232. }
  233. }
  234. if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)) {
  235. if (name == name.split("[")[0]) {
  236. myObj[name] = elm.value;
  237. } else {
  238. }
  239. } else {
  240. if (elm.type == "checkbox" && elm.checked) {
  241. if (typeof (myObj[name]) == "undefined") {
  242. myObj[name] = [];
  243. }
  244. myObj[name].push(elm.value);
  245. } else {
  246. if (elm.type == "select-multiple") {
  247. if (typeof (myObj[name]) == "undefined") {
  248. myObj[name] = [];
  249. }
  250. for (var jdx = 0, len3 = elm.options.length; jdx < len3; ++jdx) {
  251. if (elm.options[jdx].selected) {
  252. myObj[name].push(elm.options[jdx].value);
  253. }
  254. }
  255. }
  256. }
  257. }
  258. name = undefined;
  259. }
  260. return obj;
  261. }});