Javascript.RU

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

innerHTML и input
Приветствую уважаемое сообщество!
Подскажите пожалуйста, я хочу передать серверу содержимое некоего блока, содержащее тэги INPUT. Типа <div><input type='radio' name='radiobutton1' value='page' checked='checked'/></div>

Для этого у меня на сервак отсылается строка innerHTML данного дива, на серваке я хочу через DOM разобрать структуру и получить доступ к параметрам. Но скрипт сбоит, т.к. на сервак приходит строка <input type='radio' name='radiobutton1' value='page' checked='checked'>, т.е. тэг не закрывается. Вопрос - куда девается закрывающий слэш и что с этим можно сделать? Спасибо.

На всякий случай доктайп: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2013, 16:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Согласно HTML стандартам, закрывающие слэшы не нужны.
Используйте на сервере расширения, позволяющие парсить text/html.


А вобще, не понимаю, зачем парсить html на сервере, когда он на сервере же и сгенерирован, затем отправлен в браузер, затем получен от браузера, и что и теперь его нужно распарсить. Вам не кажется что цепочка мягко говоря, странная? Или html генерится в браузере? А зачем именно html отправлять, нельзя на клиенте выделить нужную инфу и отправить уже чистую на сервер? Так же проще ведь. Короче, опишите задачу свою.
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2013, 16:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Хотел предложить XMLSerializer, но оказалось что в хроме он выдает html при сериализации dom-элементов html-документа. Вот не пойму баг это или нет, потому как в FireFox и Opera все работает как надо.
<div><input type='radio' name='radiobutton1' value='page' checked='checked'/></div>

<script>
    var div = document.querySelector('div');
    
    alert(div.innerHTML);
    
    var serializer = new XMLSerializer();
    
    var children = div.childNodes;
    
    var innerXML = '';
    for (var i = 0; i < children.length; i++) {
        innerXML += serializer.serializeToString( children[i] );
    }
    
    alert(innerXML);
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2013, 16:54
Новичок на форуме
Отправить личное сообщение для needle Посмотреть профиль Найти все сообщения от needle
 
Регистрация: 27.01.2013
Сообщений: 6

Ну да, дерево генерится через JavaScript в браузере. Потом то, что нагенерилось + все, что пользователь там ввел (в частности, проблемные радиобатоны) мне нужно получить со стороны сервера и обработать. Все работает прекрасно кроме того, что JS почему-то приводит изначальный инпут в нечитаемый для XML стандарта вид, хотя в страничке он корректен.

З.Ы. Можно, конечно, через регулярку парсить, но через DOM, имхо, красивее и правильнее
Ответить с цитированием
  #5 (permalink)  
Старый 27.01.2013, 17:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Можно креатить форму скриптом и вставлять считанные данные в открытую, но не добавленную еще форму,
затем добавить её на страницу и отослать
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2013, 17:22
Новичок на форуме
Отправить личное сообщение для needle Посмотреть профиль Найти все сообщения от needle
 
Регистрация: 27.01.2013
Сообщений: 6

Ну, у меня там не совсем форма, я отправляю данные через XMLHttpRequest. Т.е., получается, что я должен на все элементы повесить событие по дублированию всех данных в некое созданное, но не прикрепленное дерево?
Ответить с цитированием
  #7 (permalink)  
Старый 27.01.2013, 17:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Короче, вот так работает даже в хроме. Правда лишний xmlns атрибут проставляет.

<div><input type='radio' name='radiobutton1' value='page' checked='checked'/></div>
 
<script>
    var div = document.querySelector('div');
     
    alert(div.innerHTML);
     
    var serializer = new XMLSerializer();
     
    var children = div.childNodes;

    var fragment = document.implementation.createDocument().createDocumentFragment();
    for (var i = 0; i < children.length; i++) {
        fragment.appendChild( children[i] );
    }
    var innerXML = serializer.serializeToString(fragment);
    alert(innerXML);
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 27.01.2013, 17:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Почему нельзя просто сувать все элементы в форму? это упростит сбор значений. В jQuery для этого метод есть ( чета типа serialize() или serializeArray() )
Ответить с цитированием
  #9 (permalink)  
Старый 27.01.2013, 17:49
Новичок на форуме
Отправить личное сообщение для needle Посмотреть профиль Найти все сообщения от needle
 
Регистрация: 27.01.2013
Сообщений: 6

Спасибо! Прикрутил сериализацию отдельной функцией, то, что нужно. Про форму и jQuerry - изначально я не планировал использовать обертки, т.к. изначальная задача была просто отправкой данных из ячейки сразу по потере фокуса, думал, что обойдусь. Но как часто водится, задача обросла дополнительными потребностями, мне потребовалось сделать табличку, которая должна приходить на сервер уже целиком при нажатии кнопки "отправить". Чтобы не городить огород, использовал те же функции генерации табички, за исключением того, что снял событие отправки данных при потере фокуса. Все уперлось в этот инпут в итоге, но с Вашей помощью все разрулил, спасибо!
Ответить с цитированием
  #10 (permalink)  
Старый 27.01.2013, 17:59
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от needle
Прикрутил сериализацию отдельной функцией...
Сериализацию во что? В XML ? или в массив значений инпутов? Или речь про $.serializeArray() ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
Изменение множества элементов Input по определённом призна Лавсановые Волокна Элементы интерфейса 1 24.12.2010 10:37
Копирование из одного input в другой input bar-boss Общие вопросы Javascript 7 08.04.2008 19:10
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55