Всем доброго времени суток!
Задался тут целью сделать полифилл для IE, Edge с целью заставить нормально работать форму, у которой поля с атрибутом
form могут быть вынесены за ее пределы. Всё работало хорошо, пока не начал вешать событие onclick на submit.
HTML:
<form id="test-form">
<input name="hidden" value="hidden" type="hidden"/>
</form>
<label for="test-text">text:</label>
<input name="text" value="test" form="test-form" type="text" id="test-text">
<button form="test-form" type="submit" name="submit">Отправить</button>
JS:
(function () {
var form = document.forms[0];
var id = form.getAttribute('id');
var selector = 'input[form="' + id + '"], textarea[form="' + id + '"], select[form="' + id + '"], button[form="' + id + '"]';
var elements = document.querySelectorAll(selector);
for (var k = 0; k < elements.length; k++) {
var element = elements[k];
if (element.type == 'submit' || element.type == 'image') {
element.onclick = submitFix;
} else {
var hidden = document.createElement('input');
hidden.name = element.name;
hidden.type = 'hidden';
hidden.value = element.value;
form.appendChild(hidden);
element.onchange = changeFix;
}
}
function submitFix(event) {
event.preventDefault();
var form = document.getElementById(this.getAttribute('form'));
if (this.name) {
var hidden = form.querySelector('[type="hidden"][name="' + this.name + '"]');
if (!hidden) {
hidden = document.createElement('input');
hidden.name = this.name;
hidden.type = 'hidden';
form.appendChild(hidden);
}
hidden.value = this.value;
}
form.submit(); // Ошибка "SCRIPT3: Член группы не найден."
}
function changeFix(event) {
event.preventDefault();
var form = document.getElementById(this.getAttribute('form'));
var hidden = form.querySelector('[type="hidden"][name="' + this.name + '"]');
hidden.value = this.value;
}
})();
Что интересно - до нажатия кнопки "Отправить"
document.forms[0].submit()
из консоли прекрасно работает, а после нажатия на кнопку - уже нет. Прошу помощи!