Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Наши скрипты > скрипт для сборки данных с формы |
Автор: polosatij 30.4.2007, 15:15 | ||
в общем, надоело писать одно и то же.. посему сейчас затратил часик и написал скрипт для сборки данных с формы.. просьба посмотреть, высказать мысли, поправить, если кто-то что-то найдёт или просто предложить более лучший вариант:
|
Автор: Alex_B 30.4.2007, 15:55 |
переменная ii объявлена глобальной? тогда нельзя будет применить скрипт если на странице более одной формы |
Автор: polosatij 30.4.2007, 21:43 | ||
вторая версия продукта ![]() принимая помарки и считая то, что input может не быть node от form имеем:
да, кстати, незабудьте, например, про encodeURIComponent ![]() |
Автор: AKS 2.5.2007, 09:01 |
polosatij Глядя на ту часть кода в функции getMapAusForm, которая касается перебора "детишек" в select'е, я понял, что интересуют только option. Зачем тогда браться за перебор коллекции childNodes? Можно ведь сразу "уцепиться" за options - условие в цикле останется одно и будет оно короче... |
Автор: polosatij 2.5.2007, 14:29 | ||
AKS, да, ты прав, это излишки прошлой версии ![]() значит так, переправляя строку 41, имеем:
|
Автор: AKS 2.5.2007, 14:44 | ||
polosatij, у меня еще такой вопрос. В функции getMapAusForm есть два цикла по коллекциям elements объекта формы и options объекта меню выбора. Могут ли в эти коллекции "попасться" безымянные элементы? Т.е. есть ли смысл в условиях, вроде:
Лично я не могу утвержать, что это возможно, или же наоборот - поэтому и спрашиваю. |
Автор: polosatij 2.5.2007, 14:55 |
ммм.. я это сделал, так как не вижу смысла в элементах, у которых нет имени => ведь данные передающиеся по AJAX должны быть хоть как-то названы.. ведь на сервере, их надо как-то спрашивать ![]() |
Автор: AKS 2.5.2007, 15:01 |
polosatij, так вот я и хочу узнать ваше мнение - могут ли в коллекцию элементов формы попасть элементы без имени. Т.е. мне кажется, что если у элемента нет имени тэга, то как он вообще может оказаться среди элементов формы (или меню выбора)? |
Автор: 12345c 2.5.2007, 16:02 |
AKS: насколько помню, элементы без имени так и передаются: ?=12&=34& ... |
Автор: AKS 2.5.2007, 16:03 | ||||
Т.к. для IE надо было заменить цикл for...in, неподходящий для перебора коллекции элементов формы, стал переделывать. Вот что в результате получилось из функции getMapAusForm:
Добавлено @ 16:13 12345c, не то я имел ввиду. Условие:
Т.е. по-русски спрашиваем: "Элемент, а есть ли у тебя имя тэга?", так ведь? Вот я и хочу узнать (сам на 100% не знаю) - а бывают ли в коллекциях элементы без имени тэга? |
Автор: 12345c 2.5.2007, 18:21 | ||
AKS, nodeName - это совсем не из "коллекции элементов формы" - form. при проверке "правильные" браузеры сказали, что нет, а IE - да (при пустом имени тег.
|
Автор: AKS 2.5.2007, 18:39 | ||
12345c, ничего не пойму! Что значит:
? Взял я, к примеру, коллекцию form.elements. Вот я ее перебираю и спрашиваю каждый элемент коллекции: "Есть у тебя nodeName?" О чем речь? О имени тэга. Правильно? |
Автор: DenVdmj 27.1.2009, 15:14 | ||||||||
Рылся в гугле, искал код собирающий данные с форм, опять на винграде обнаружилось интересное обсуждение ![]() Что забавно, кругом примеры с использованием фрэймворков, джиквери и прототип в основном. Другие имеют или очень раздутый код или работают некорректно. Код от АКС'а один из самых простых, но тоже не идеален, например:
нет обнуления i2 для каждого нового select'а, очевидный недосмотр. Но на самом деле тут еще большие проблемы, попробуйте выбрать несколько опций (например "select №1, value №1", "select №2, value №2", "select №3, value №3") на такой форме:
Вызов: getUrlFromMap(getMapAusForm('testform', true)) покажет: =Сброс&input_text_disabled=123&input_text=0&input_radioA=r3&select1=S1-V1 в то время как Prototype: $('testform').serialize() сериализует так: input_text=0&input_password=&input_file=&input_hidden=&select1=S1-V1&select2=S2-V2&select3=S3-V3&textarea= В чем дело? Правильно ли поступает прототайп, что добавляет, например, пустой input_file? Как написать правильный сериализатор формы? Ответы для себя нашел тут: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 (перевод: http://pyramidin.narod.ru/html401/forms.html#h-17.13.2, http://www.google.com/search?hl=ru&client=opera&rls=ru&hs=SnQ&q=%22%D0%A1%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5+%D0%AD%D0%A3+%D0%AD%D0%A3%2C+%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5+%D0%BD%D0%B5+%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D1%8E%D1%82%D1%81%D1%8F+%D0%B8%D0%B7-%D0%B7%D0%B0+%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BE%D0%BA+%D0%B2+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%D1%85+%D1%81%D1%82%D0%B8%D0%BB%D0%B5%D0%B9%2C+%D0%BC%D0%BE%D0%B3%D1%83%D1%82+%D0%B1%D1%8B%D1%82%D1%8C+%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=) После прочтения рекомендаций родился такой вариант (не без оглядки на код АКС'а):
Рекомендациям этот код полностью не соответствует, например должна отправляться только нажатая кнопка submit, и еще всякое по мелочам, но, допустим, в отличии от прототайпа не "отправляется" reset, и в url-строку не добавляются лишние амперсанды. Ну и если посмотреть сколько кода тратят популярные фреймворки на решение одной только этой задачи, то становится просто плохо. PS. Фрагмент тестового html с формой:
|