|
690 | 690 | /** |
691 | 691 | * Compact checkboxes |
692 | 692 | * @param {HTMLFormElement} form |
| 693 | + * @param {FormData} formData |
693 | 694 | */ |
694 | | - Nette.compactCheckboxes = function (form) { |
| 695 | + Nette.compactCheckboxes = function (form, formData) { |
695 | 696 | let values = {}; |
696 | 697 |
|
697 | | - for (let i = 0; i < form.elements.length; i++) { |
698 | | - let elem = form.elements[i]; |
699 | | - if (elem.tagName |
700 | | - && elem.tagName.toLowerCase() === 'input' |
701 | | - && elem.type === 'checkbox' |
702 | | - ) { |
703 | | - let name = elem.getAttribute('data-nette-name'); |
704 | | - if (elem.name |
705 | | - && elem.name.endsWith('[]') |
706 | | - ) { |
707 | | - name = elem.name.substring(0, elem.name.length - 2); |
708 | | - elem.removeAttribute('name'); |
709 | | - elem.setAttribute('data-nette-name', name); |
710 | | - } |
711 | | - |
712 | | - if (name) { |
713 | | - values[name] = values[name] || []; |
714 | | - if (elem.checked && !elem.disabled) { |
715 | | - values[name].push(elem.value); |
716 | | - } |
717 | | - } |
| 698 | + for (let elem of form.elements) { |
| 699 | + if (elem instanceof HTMLInputElement && elem.type === 'checkbox' && elem.name.endsWith('[]') && elem.checked && !elem.disabled) { |
| 700 | + formData.delete(elem.name); |
| 701 | + values[elem.name] ??= []; |
| 702 | + values[elem.name].push(elem.value); |
718 | 703 | } |
719 | 704 | } |
720 | 705 |
|
721 | 706 | for (let name in values) { |
722 | | - if (form.elements[name] === undefined) { |
723 | | - let elem = document.createElement('input'); |
724 | | - elem.setAttribute('name', name); |
725 | | - elem.setAttribute('type', 'hidden'); |
726 | | - form.append(elem); |
727 | | - } |
728 | | - form.elements[name].value = values[name].join(','); |
729 | | - form.elements[name].disabled = values[name].length === 0; |
| 707 | + formData.set(name.substring(0, name.length - 2), values[name].join(',')); |
730 | 708 | } |
731 | 709 | }; |
732 | 710 |
|
|
737 | 715 | */ |
738 | 716 | Nette.initForm = function (form) { |
739 | 717 | if (form.method === 'get' && form.hasAttribute('data-nette-compact')) { |
740 | | - form.addEventListener('submit', () => Nette.compactCheckboxes(form)); |
| 718 | + form.addEventListener('formdata', (e) => Nette.compactCheckboxes(form, e.formData)); |
741 | 719 | } |
742 | 720 |
|
743 | 721 | check: { |
|
0 commit comments