[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Полезные штуки
ApuktaChehov
И так, для начала, хочу всех поприветствовать.

Мне иногда приходится работать с большим количеством всякие инпутов, селектов и текстарей. Приходится постоянно получать их значения, т.к. данные отправляются аяксом. Меня это уже так достало, что я решил, что с этим надо что-то делать. И вот, что я придумал:

user_data = {};
function getData(parent) {

//Обходим всех детей текущего элемента
for(var childItem in parent.childNodes) {
var this_obj = parent.childNodes[childItem];

if(this_obj.nodeType == 1) {

//Обрабатываем все input
if(this_obj.tagName == 'INPUT' && this_obj.type == 'text')
user_data[this_obj.name] = this_obj.value;

//Обрабатываем все checkbox
if(this_obj.tagName == 'INPUT' && this_obj.type == 'checkbox')
user_data[this_obj.name] = this_obj.checked;

//Обрабатываем все radio
if(this_obj.tagName == 'INPUT' && this_obj.type == 'radio' && this_obj.checked == true)
user_data[this_obj.name] = this_obj.value;

//Обрабатываем все select
if(this_obj.tagName == 'SELECT')
user_data[this_obj.name] = this_obj.value;

//Обрабатываем все textarea
if(this_obj.tagName == 'TEXTAREA')
user_data[this_obj.name] = this_obj.value;
}

getData(this_obj);
}

<div id="div_form">
<
table>
<
tr>
<
td>Имя</td>
<
td><input type="test" name="fname"/></td>
</
tr>
<
tr>
<
td>Фамилия</td>
<
td><input type="test" name="lname"/></td>
</
tr>
<
tr>
<
td>Страна</td>
<
td><input type="test" name="country"/></td>
</
tr>
<
tr>
<
td>Город</td>
<
td><input type="test" name="city"/></td>
</
tr>
<
tr>
<
td>JavaScript</td>
<
td><input type="checkbox" name="js"/></td>
</
tr>
<
tr>
<
td>PHP</td>
<
td><input type="checkbox" name="php"/></td>
</
tr>
<
tr>
<
td>Пол</td>
<
td>
<
select name="sex">
<
option>Выбрать</option>
<
option>М</option>
<
option>Ж</option>
</
select>
</
td>
</
tr>
<
tr>
<
td>Мне < 25</td>
<
td><input type="radio" name="age" value="<25"/></td>
</
tr>
<
tr>
<
td>Мне > 25</td>
<
td><input type="radio" name="age" value=">25"/></td>
</
tr>
<
tr>
<
td>О себе</td>
<
td>
<
textarea name="user_info"></textarea>
</
td>
</
tr>
<
tr>
<
td colspan="2"><input type="button" value="Получить данные" onclick="getData(this.parentNode.parentNode.parentNode.parentNode.parentNode);"/></td>
</
tr>
</
table>
</
div>


Эта функция рекурсивно обходи всех детей указанного элемента, собирая их всех селектов, инпутов, и текстарей их имена и значения. В процессе своей работы она формирует массив(объект), вида имя:значение.

В боевых условиях еще не испытывал ее, но думаю, что получить значения большой формы, без обработки каждого ее элемента вручную - очень удобно.

Как думает? И фигня все это?

P.S. Вот сейчас пришла в голову идея, о том, что бы еще и ссылку на сам объект, из которого данные достаются, сохранить, что бы его можно было обработать после(например подсветить).



Спустя 17 минут, 1 секунда (6.09.2011 - 15:56) redreem написал(а):
jQuery.serialize делает тоже самое.

Спустя 2 минуты, 42 секунды (6.09.2011 - 15:58) ApuktaChehov написал(а):
redreem - отлично, пусть делает. Но это ведь мой велосипед! Так же можно сказать, что другой программист - практикант, сделает тоже самое за зарплату. laugh.gif

Спустя 3 минуты, 6 секунд (6.09.2011 - 16:01) ApuktaChehov написал(а):
redreem - ах да, забыл спросить, а вы знаете как работает jQuery.serialize?

Спустя 39 минут, 37 секунд (6.09.2011 - 16:41) redreem написал(а):
не понимаю иронии. я успешно пользуюсь сериалайзом.

Спустя 19 минут, 16 секунд (6.09.2011 - 17:00) ApuktaChehov написал(а):
redreem - что отличает программиста от пользователя? Программист как и пользователь, тоже пользуется разными "благами" программирования. И отличается программист от юзера тем, что программист не только умеет пользоваться инструментами, но и понимает как эти инструменты работают.

Вот и вся ирония. Я стремлюсь уметь делать все, а не быть зажатым в возможности всяческих фреймворков.

По этому и спрашиваю, знаете и понимаете ли вы, как работает jQuery.serialize, коли утверждаете, что jQuery.serialize делает тоже самое?

Спустя 4 минуты, 36 секунд (6.09.2011 - 17:05) redreem написал(а):
то что жкверивский сериалайз берет данные только из формы - это отличие не существенное. читать мораль о пользе программирования смысла не вижу, так как выложив "свои велосипеды" ваш покажется детской машинкой. smile.gif а сказал про жквери только потому, что мог предположить что вам сериалайз не известен. хотел подсказать, ну раз уж вас так задело - забудем диалог smile.gif

Спустя 8 минут, 46 секунд (6.09.2011 - 17:14) ApuktaChehov написал(а):
Да, не не задело. Я не очень люблю фреймворки, но понимаю их положительные качества. Бывало тут, что "перцы" считавшие что JS написан на JQ, пытались еще с кем-то спорить и кого-то учить. По этому и задаю подобные вопросы. Что бы понять с кем умею дело.

Спустя 5 минут, 38 секунд (6.09.2011 - 17:19) redreem написал(а):
да, я знаком с челом, который на вопрос "что такое жквери" отвечает: "это ВСЕ функции JS".

Спустя 2 минуты, 9 секунд (6.09.2011 - 17:21) redreem написал(а):
часто имея дело с дизайнерами-верстальщиками и демонстрируя им какую-то технологию натыкаюсь на принципиальный скептецизм. типа все уже сделано в этом мире и нам остается только понижать плоды, а делать что-то новое смысла нет.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.