Support multiple select fields in form submissions #147

Merged
robinnorth merged 1 commits from fix/forms-multiple-select into master 2018-04-12 17:03:30 -05:00
2 changed files with 33 additions and 8 deletions

View File

@@ -56,7 +56,7 @@
<br /> <br />
<label for="get-form-select">Select list:</label> <label for="get-form-select">Select list:</label>
<select name="select" id="get-form-select"> <select multiple name="select" id="get-form-select">
<option> <option>
Option 1 Option 1
</option> </option>
@@ -119,7 +119,7 @@
<br /> <br />
<label for="post-form-select">Select list:</label> <label for="post-form-select">Select list:</label>
<select name="select" id="post-form-select"> <select multiple name="select" id="post-form-select">
<option> <option>
Option 1 Option 1
</option> </option>

View File

@@ -32,15 +32,40 @@ var formAction = function(el, event) {
event.preventDefault() event.preventDefault()
for (var elementKey in el.elements) { for (var elementKey in el.elements) {
if (Number.isNaN(Number(elementKey))) {
continue;
}
var element = el.elements[elementKey] var element = el.elements[elementKey]
var tagName = element.tagName.toLowerCase()
// jscs:disable disallowImplicitTypeConversion // jscs:disable disallowImplicitTypeConversion
if (!!element.name && element.attributes !== undefined && element.tagName.toLowerCase() !== "button") { if (!!element.name && element.attributes !== undefined && tagName !== "button") {
var type = element.attributes.type
// jscs:enable disallowImplicitTypeConversion // jscs:enable disallowImplicitTypeConversion
if ((!element.attributes.type || element.attributes.type.value !== "checkbox" && element.attributes.type.value !== "radio") || element.checked) { if ((!type || type.value !== "checkbox" && type.value !== "radio") || element.checked) {
options.requestOptions.requestParams.push({ // Build array of values to submit
name: encodeURIComponent(element.name), var values = []
value: encodeURIComponent(element.value)
}) if (tagName === "select") {
var opt
for (var i = 0; i < element.options.length; i++) {
opt = element.options[i]
if (opt.selected) {
values.push(opt.value || opt.text)
}
}
}
else {
values.push(element.value)
}
for (var j = 0; j < values.length; j++) {
options.requestOptions.requestParams.push({
name: encodeURIComponent(element.name),
value: encodeURIComponent(values[j])
})
}
} }
} }
} }