Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2016, 21:20
Новичок на форуме
Отправить личное сообщение для eugen81 Посмотреть профиль Найти все сообщения от eugen81
 
Регистрация: 20.10.2016
Сообщений: 5

SCRIPT3: Член группы не найден. (Edge)
Всем доброго времени суток!
Задался тут целью сделать полифилл для 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()

из консоли прекрасно работает, а после нажатия на кнопку - уже нет. Прошу помощи!
Ответить с цитированием
  #2 (permalink)  
Старый 20.10.2016, 21:28
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Лень разбираться, но в любом случае onclick - плохой вариант, вешать надо во-первых через addEventListener\attachEvent, а во-вторых на onsubmit.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 20.10.2016, 21:35
Новичок на форуме
Отправить личное сообщение для eugen81 Посмотреть профиль Найти все сообщения от eugen81
 
Регистрация: 20.10.2016
Сообщений: 5

Сообщение от Aetae Посмотреть сообщение
Лень разбираться, но в любом случае onclick - плохой вариант, вешать надо во-первых через addEventListener\attachEvent, а во-вторых на onsubmit.
Через addEventListener делал, результат тот же. И если кнопка вынесена из формы, то onsubmit работать не будет. А если кнопка внутри формы, то onsubmit не нужен.
Ответить с цитированием
  #4 (permalink)  
Старый 20.10.2016, 21:46
Новичок на форуме
Отправить личное сообщение для eugen81 Посмотреть профиль Найти все сообщения от eugen81
 
Регистрация: 20.10.2016
Сообщений: 5

Rise, так на клик и сделано
Ответить с цитированием
  #5 (permalink)  
Старый 20.10.2016, 22:13
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

Rise, видимо, в ms тоже так подумали и правильно сделали "имхо".
http://www.w3schools.com/tags/att_button_form.asp
Ответить с цитированием
  #6 (permalink)  
Старый 20.10.2016, 22:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от eugen81
name="submit"
Ответить с цитированием
  #7 (permalink)  
Старый 20.10.2016, 22:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Попробуй убрать event.preventDefault(); и добавить в конце return false;
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 20.10.2016, 22:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

eugen81,
или хотябы так name="Submit"
Ответить с цитированием
  #9 (permalink)  
Старый 21.10.2016, 06:34
Новичок на форуме
Отправить личное сообщение для eugen81 Посмотреть профиль Найти все сообщения от eugen81
 
Регистрация: 20.10.2016
Сообщений: 5

рони,
Спасибо, дело было в name="submit" какая разница IE как я назову элемент?
Rise,
Lemme,
Если этот способ работает во всех остальных браузерах, значит это кому-то нужно. Пример выше - просто тест, реально на странице несколько форм, но элементы в ней располагаются согласно макету так, что запихать все элементы в свои формы сложно
Ответить с цитированием
  #10 (permalink)  
Старый 21.10.2016, 07:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от eugen81
Если этот способ работает во всех остальных браузерах
с name="submit" какой браузер у вас работает???
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск