Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Почему не работает input вне формы в IE10? (https://javascript.ru/forum/xhtml-html-css/46418-pochemu-ne-rabotaet-input-vne-formy-v-ie10.html)

AlexSpl 09.04.2014 04:38

Почему не работает input вне формы в IE10?
 
Есть код с проблемой. Суть проблемы кратко:

<html>
	<head>
	</head>
	<body>
		<form id="send" method="POST" action="addphone.php">
			<input type="submit" name="__submit" />
		</form>
		
		<input name="__inp" form="send" />
	</body>
</html>


var_dump( $_POST ); возвращает:

В Firefox:
array(2) { ["__submit"]=> string(16) "Отправить запрос" ["__inp"]=> string(5) "22222" }

В Opera:
array(2) { ["__submit"]=> string(9) "Отправить" ["__inp"]=> string(5) "22222" }

Т.е. всё OK.

Однако в IE10 var_dump( $_POST ); возвращает:
array(1) { ["__submit"]=> string(14) "Подача запроса" }

Т.е. не передаёт value input'a.

Подскажите, пожалуйста, как сделать так, чтобы работало (без помещения input'а внутрь формы)?

danik.js 09.04.2014 07:48

Цитата:

Сообщение от AlexSpl
Подскажите, пожалуйста, как сделать так, чтобы работало (без помещения input'а внутрь формы)?

Технически - никак. IE10 не поддерживает атрибут form (а также formmethod, formaction и тд), который является частью HTML5 стандарта.

Теоретически можно написать костыль на js, который будет ловить событие отправки формы и временно клонировать в нее поля, которые привязаны к форме через атрибут form. Может даже есть готовый polyfill. Но что-то я не нашел. Верней нашел, но он громоздкий: webshims

AlexSpl 10.04.2014 03:26

Это плохо, придётся вычеркнуть IE из списка поддерживаемых.

У меня на странице около 400 input'ов и их число будет расти. Есть кнопка submit, которая отправляет только те значения, которые были изменены. Для этого на onchange висит функция, которая прописывает изменённым input'ам атрибут form (изначально этого атрибута input'ы не имеют). Таким образом отсылается только нужная информация.

Может всё-таки как-то можно в IE сделать, чтобы отсылались только изменённые значения input'ов? Может быть, можно по onchange добавлять input'ы в форму с помощью appendChild()?

Aetae 10.04.2014 04:22

AlexSpl, можно.
Раз уж вы всё равно проходите по нужным input перед отправкой, то ничего не мешает сделать:
form.appendChild(input.cloneNode(true)).hidden = true;

AlexSpl 10.04.2014 05:50

Спасибо. Без атрибута form сложно получается. Дело в том, что input'ы создаются и удаляются динамически, так что, похоже, придётся при удалении оригинала удалять также и его клон в форме.

Aetae 10.04.2014 05:53

AlexSpl, собирать в один контейнер внутри form перед отправкой и удалять оный сразу после.

monolithed 10.04.2014 21:41

Полагаю, что вы что-то делаете не так, раз не можете обойтись без атрибута form.


Часовой пояс GMT +3, время: 00:35.