Javascript.RU

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

Как из формы сделать объект полям которого будут имена полей формы?
Добрый день, всем. Есть интересный вопрос, ИМХО, представим, что есть форма с такими полями:

<input name="form.pj" value="1235">
<input name="form.cr" value="123">
<input name="form.app.id" value="1234">
<input name="form.app.fm.id" value="12356">

Из данной формы нужно получить объект вот такого формата:

form{
  "pf": 1235
  "cr": 123
  "app": {
    "id": 1234 
    "fm": {
      "id": 12356
    }
  }
}
Ответить с цитированием
  #2 (permalink)  
Старый 25.02.2014, 13:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от dekey
Из данной формы нужно получить объект вот такого формата
Иди в цикле по элементам... Далее анализируй значение атрибута name, при этом примени рекурсию...
Ответить с цитированием
  #3 (permalink)  
Старый 25.02.2014, 13:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вобще странная задача. Если данная html-форма не предназначена для отпрваки на сервер, то зачем она тогда вобще нужна? Только чтобы извращенческим способом считать ее js-скриптом и сконвертить в объект?
Но не проще ли прям на сервере сформировать нужную json-структуру и записать в html-страницу? JS'у останется только распарсить json.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2014, 13:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

dekey,

<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
 <input name="form.pj" value="1235">
 <input name="form.cr" value="123">
 <input name="form.app.id" value="1234">
 <input name="form.app.fm.id" value="12356">
 <script>
    var inp =  document.querySelectorAll("input"), form = {};
    for (var i=0; i<inp.length; i++)  {
      var arr = inp[i].name.split('.'), tmp = form;
      for (var k=1; k<arr.length-1; k++)  { !tmp[arr[k]] && (tmp[arr[k]] = {}) ; tmp = tmp[arr[k]]}
      tmp[arr[k]] = inp[i].value
    }
    alert(JSON.stringify(form));
 </script>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 25.02.2014, 13:47
Новичок на форуме
Отправить личное сообщение для dekey Посмотреть профиль Найти все сообщения от dekey
 
Регистрация: 25.02.2014
Сообщений: 4

Сообщение от danik.js Посмотреть сообщение
Вобще странная задача. Если данная html-форма не предназначена для отпрваки на сервер, то зачем она тогда вобще нужна? Только чтобы извращенческим способом считать ее js-скриптом и сконвертить в объект?
Но не проще ли прям на сервере сформировать нужную json-структуру и записать в html-страницу? JS'у останется только распарсить json.
Сам объект будет отправлен на сервер в виде JSON.
Ответить с цитированием
  #6 (permalink)  
Старый 25.02.2014, 13:51
Новичок на форуме
Отправить личное сообщение для dekey Посмотреть профиль Найти все сообщения от dekey
 
Регистрация: 25.02.2014
Сообщений: 4

Сообщение от рони Посмотреть сообщение
dekey,

<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
 <input name="form.pj" value="1235">
 <input name="form.cr" value="123">
 <input name="form.app.id" value="1234">
 <input name="form.app.fm.id" value="12356">
 <script>
    var inp =  document.querySelectorAll("input"), form = {};
    for (var i=0; i<inp.length; i++)  {
      var arr = inp[i].name.split('.'), tmp = form;
      for (var k=1; k<arr.length-1; k++)  { !tmp[arr[k]] && (tmp[arr[k]] = {}) ; tmp = tmp[arr[k]]}
      tmp[arr[k]] = inp[i].value
    }
    alert(JSON.stringify(form));
 </script>
</body>
</html>
Спасибо. Как раз то, что нужно!
Ответить с цитированием
  #7 (permalink)  
Старый 25.02.2014, 14:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну, чета я фигню написал.
Ок, мой вариант, во много схожий с уже предложенным. Просто чуть более структурированный:

<!DOCTYPE HTML>
<form action="">
	<input name="form.pj" value="1235">
	<input name="form.cr" value="123">
	<input name="form.app.id" value="1234">
	<input name="form.app.fm.id" value="12356">
	<script>
		var formElement = document.querySelector('form');
		var formData = toTree(serializeForm(formElement)).form;
		alert(JSON.stringify(formData));

		function serializeForm(form) {
			return Array.apply(null, form).reduce(function(fields, field) {
				fields[field.name] = field.value;
				return fields;
			}, {});
		}

		function toTree(object) {
			var root = {};
			for (var key in object) {
				var subtree = root;
				var path = key.split('.');
				for (var i = 0; i < path.length - 1; i++) {
					subtree = subtree[path[i]] || (subtree[path[i]] = {});
				}
				subtree[path[i]] = object[key];
			}
			return root;
		}
	</script>
</form>


Не работает в IE8! Хотя исправить очень просто.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2014, 14:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от danik.js
Просто чуть более структурированный
правильно, но неочень понятно.

Последний раз редактировалось рони, 25.02.2014 в 15:19.
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2014, 15:08
Аспирант
Посмотреть профиль Найти все сообщения от Maxmaxmaxmaximus8
 
Регистрация: 22.02.2014
Сообщений: 96

FormData
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2014, 15:29
Новичок на форуме
Отправить личное сообщение для dekey Посмотреть профиль Найти все сообщения от dekey
 
Регистрация: 25.02.2014
Сообщений: 4

спасибо всем!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отключить автозаполнение полей формы в Firefox? jox1e (X)HTML/CSS 7 11.10.2017 00:29
Как сделать, чтобы русские буквы не вводились в определенные поля формы? yachainik Общие вопросы Javascript 6 13.02.2017 16:43
Как сделать disabled кнопки во время отправки формы? Bad Request Events/DOM/Window 7 16.04.2014 13:49
как сделать гиперсылку на объект javascript??? kos_walker Общие вопросы Javascript 3 30.09.2008 06:58
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14