| | 269 | |
|---|
| | 270 | MochiKit.DOM.formContents = function (elem/* = document */) { |
|---|
| | 271 | var names = []; |
|---|
| | 272 | var values = []; |
|---|
| | 273 | var m = MochiKit.Base; |
|---|
| | 274 | var self = MochiKit.DOM; |
|---|
| | 275 | if (typeof(elem) == "undefined" || elem == null) { |
|---|
| | 276 | elem = self._document; |
|---|
| | 277 | } else { |
|---|
| | 278 | elem = self.getElement(elem); |
|---|
| | 279 | } |
|---|
| | 280 | m.nodeWalk(elem, function (elem) { |
|---|
| | 281 | var name = elem.name; |
|---|
| | 282 | if (m.isNotEmpty(name)) { |
|---|
| | 283 | var tagName = elem.nodeName; |
|---|
| | 284 | if (tagName == "INPUT" |
|---|
| | 285 | && (elem.type == "radio" || elem.type == "checkbox") |
|---|
| | 286 | && !elem.checked |
|---|
| | 287 | ) { |
|---|
| | 288 | return null; |
|---|
| | 289 | } |
|---|
| | 290 | if (tagName == "SELECT") { |
|---|
| | 291 | if (elem.type == "select-one") { |
|---|
| | 292 | var index = elem.selectedIndex; |
|---|
| | 293 | if (index >= 0) { |
|---|
| | 294 | var opt = elem.options[index]; |
|---|
| | 295 | names.push(name); |
|---|
| | 296 | values.push((opt.value) ? opt.value : opt.text); |
|---|
| | 297 | } |
|---|
| | 298 | return null; |
|---|
| | 299 | } else { |
|---|
| | 300 | var opts = elem.options; |
|---|
| | 301 | for (var i=0; i < opts.length; i++) { |
|---|
| | 302 | var opt = opts[i]; |
|---|
| | 303 | if (!opt.selected) { |
|---|
| | 304 | continue; |
|---|
| | 305 | } |
|---|
| | 306 | names.push(name); |
|---|
| | 307 | values.push((opt.value) ? opt.value : opt.text); |
|---|
| | 308 | } |
|---|
| | 309 | return null; |
|---|
| | 310 | } |
|---|
| | 311 | } |
|---|
| | 312 | if (tagName == "FORM" || tagName == "P" || tagName == "SPAN" |
|---|
| | 313 | || tagName == "DIV" |
|---|
| | 314 | ) { |
|---|
| | 315 | return elem.childNodes; |
|---|
| | 316 | } |
|---|
| | 317 | names.push(name); |
|---|
| | 318 | values.push(elem.value || ''); |
|---|
| | 319 | return null; |
|---|
| | 320 | } |
|---|
| | 321 | return elem.childNodes; |
|---|
| | 322 | }); |
|---|
| | 323 | return [names, values]; |
|---|
| | 324 | }; |
|---|
| | 325 | |
|---|