From a9404130b3f21a09fe9e5ce9b1a068b9a27a5cd6 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 29 Dec 2019 23:16:00 +0100 Subject: [PATCH] handle checkboxes and fix bug --- Views/FormView.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Views/FormView.js b/Views/FormView.js index fd49e5f..deb5682 100644 --- a/Views/FormView.js +++ b/Views/FormView.js @@ -294,15 +294,16 @@ export class FormView { return []; } - const selects = form.getElementsByTagName('select'), - textareas = form.getElementsByTagName('textarea'), - inputs = [].slice.call(form.getElementsByTagName('input')), - buttons = form.getElementsByTagName('button'), - canvas = form.getElementsByTagName('canvas'), - external = document.querySelectorAll('form:not(#' + this.id + ') [form=' + this.id + ']'), - special = form.querySelectorAll('[data-name]'), - specialExt = document.querySelectorAll('form:not(#' + this.id + ') [data-form=' + this.id + '] [data-name]'), - inputLength = inputs.length; + const selects = form.getElementsByTagName('select'), + textareas = form.getElementsByTagName('textarea'), + inputs = [].slice.call(form.getElementsByTagName('input')), + buttons = form.getElementsByTagName('button'), + canvas = form.getElementsByTagName('canvas'), + external = [].slice.call(document.querySelectorAll(':not(#' + this.id + ') [form=' + this.id + ']')), + special = form.querySelectorAll('[data-name]'), + specialExt = document.querySelectorAll('form:not(#' + this.id + ') [data-form=' + this.id + '] [data-name]'), + inputLength = inputs.length, + externalLength = external.length; // todo: handle trigger element. check which element triggered the submit and pass it's name+value // the reason for this is, there may be multiple buttons in a form which trigger a send @@ -310,11 +311,15 @@ export class FormView { // Maybe it makes sense to do this however at a different place e.g. the actual data submit for (let i = 0; i < inputLength; ++i) { - if (inputs[i].type === 'checkbox' && !inputs[i].checked) { + if ((inputs[i].type === 'checkbox' || inputs[i].type === 'radio') && !inputs[i].checked) { delete inputs[i]; } + } - // todo: handle radio here as well + for (let i = 0; i < externalLength; ++i) { + if ((external[i].type === 'checkbox' || external[i].type === 'radio') && !external[i].checked) { + delete external[i]; + } } return Array.prototype.slice.call(inputs).concat(