Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка POST формы

Сообщения:  [1-10]   [11-18] 

 
 автор: АЯС   (09.02.2012 в 08:31)   письмо автору
13.4 Кб
 
   для: selma   (09.02.2012 в 03:33)
 

Странно... написал я вам, что надо сделать изменения во всех 3 (трёх) последних функциях.
И даже эти функции перечислил - TEST_rng, TEST_txt, TEST_rd

И сделал я эти изменения.
У себя.
И проверил.
И всё работает (у меня).

Пообещался я вам здесь выложить изменённый код всех этих трёх функций.
А выложил почему-то всего две.
Как раз код изменённой функции TEST_rng, коя отвечает за ранжирование, я почему-то и не выложил... :-((

См. в аттаче/приложении трётью версию всего кода :-)

  Ответить  
 
 автор: selma   (09.02.2012 в 03:33)   письмо автору
 
   для: АЯС   (08.02.2012 в 12:05)
 

Уважаемый АЯС, лишнии пробелы исчезли, все кроме после RADIO

и есди сделать
visibility = 'hidden'}          //4. Создаём шаблон SPAN'а для вывода сообщения об ошибке заполнения


то в ранжировании не выводятся никакие сообщения об ошибках

  Ответить  
 
 автор: АЯС   (08.02.2012 в 12:05)   письмо автору
1.6 Кб
 
   для: selma   (08.02.2012 в 10:31)
 

Спаны (и под полем <TEXTAREA>, и под группой радиокнопок, и справа от каждого рангового инпута) - они не пустые, изначально в них помещён неразрывный пробел.

И сделано это специально, потому как если их изначально "убрать" и создавать только при сообщениях об ошибке (и удалять, когда ошибка исправлена), то под них будет динамически выделяться/удаляться "место", что приведёт к дёрганью страницы по высоте и ширине.

Если для вас очень критично визуальное наличие пробелов на странице, то решить можно - всем "пробельным" спанам надо дать "невидимость".
В коде это будут следующие изменения:
with (spn.style) {fontSize = '9pt'; color = 'red'; visibility = 'hidden'}          //4. Создаём шаблон SPAN'а для вывода сообщения об ошибке заполнения

И во всех трёх последних функциях (TEST_rng, TEST_txt, TEST_rd) надо найти строки, где есть innerHTML и там добавить изменение видимости.

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

Разумеется, можно не резервировать место под эти спаны, а "накладывать" их поверх существующего слоя. Тогда все DIV'ы c <TEXTAREA> и радиокнопками можно уменьшить по высоте на высоту этого самого спана.
Если очень надо - напишите. Позже сделаю.

  Ответить  
 
 автор: selma   (08.02.2012 в 10:31)   письмо автору
 
   для: АЯС   (08.02.2012 в 10:18)
 

Верх мастерства!!! И правда, в ИА не проверяла:(

нашла еще кое что, влияющее на css, под полем textarea и radio всегда присутствует пустой span, можно его как нить убрать, а использовать только для ошибок?

  Ответить  
 
 автор: АЯС   (08.02.2012 в 10:18)   письмо автору
12.8 Кб
 
   для: selma   (08.02.2012 в 09:11)
 

Поторопились вы :-)

Я же просил "покрутить".
В общем, в MSIE код не работает.
Необходимы ДВА изменения.
-----------------------------------------
ПЕРВОЕ: вместо переписывания типа кнопки надо создавать новую, а существующую удалять.
Изменение следующие: строки с комментариями 19 и 20 удаляем. Вот эти:
//НАДО УДАЛИТЬ 5 строк
el [j].type = 'button';                                                           //19. Переделываем тип кнопки сабмита на button
if (window.addEventListener)
   el [j].addEventListener ('click', TEST_sbmt, false);
else el [j].attachEvent ('onclick', TEST_sbmt, false);                            //20. Навешиваем на кнопку "Отправить" функцию итоговой проверки
//НАДО УДАЛИТЬ 5 строк

Вместо них надо прописать:
//НАДО ПРОПИСАТЬ вместо удалённого
var btn = document.createElement ('input');
btn.type = 'button'; btn.value = 'Отправить';
el [j].parentNode.insertBefore (btn, el [j]);                                     //19. Создаём кнопку типа 'button' и прописываем её перед кнопкой сабмита

if (window.addEventListener)
   btn.addEventListener ('click', TEST_sbmt, false);
else btn.attachEvent ('onclick', TEST_sbmt, false);                               //20. Навешиваем на эту кнопку функцию итоговой проверки

el [j].parentNode.removeChild (btn.nextSibling);                                  //20а. Удаляем кнопку сабмита
//НАДО ПРОПИСАТЬ вместо удалённого
-----------------------------------------

ВТОРОЕ: спан в DIV'e под <TEXTAREA> надо создавать ДО назначения функции проверки самому <TEXTAREA>.
Изменение следующее - надо трём строкам с комментарием 10.1. изменить место в коде и прописать их сразу после строки с комментарием 10.4., вот так:
if (obj [j].getElementsByTagName ('textarea').length)                             //9. Определяем тип вопроса в DIV'е
      {                                                                           //10. Если тип - "текстовое поле", то:
      var t = obj [j].getElementsByTagName ('textarea') [0];
      if (window.addEventListener)
      t.addEventListener ('input', TEST_txt, false);
      else t.attachEvent ('onpropertychange', TEST_txt, false);                   //10.1. назначаем ему функцию проверки "на лету"

      T_txt [T_txt.length] = t.id = 'tTX' + (j + 1);                              //10.2. присваиваем ему технический ID и запоминаем его в массиве
      var x = spn.cloneNode (1); x.id = 'tSP' + (j + 1);                          //10.3. Присваиваем SPAN'у для вывода сообшений об ошибке технический ID
      obj [j].appendChild (x);                                                    //10.4. Добавляем этот SPAN в самый низ DIV'a 
      if (window.addEventListener)
      t.addEventListener ('input', TEST_txt, false);
      else t.attachEvent ('onpropertychange', TEST_txt, false);                   //10.1. назначаем ему функцию проверки "на лету"

      }

Теперь будет работать и в MSIE.

PS. На всякий случай исправленную версию помещаю в аттач.

  Ответить  
 
 автор: selma   (08.02.2012 в 09:11)   письмо автору
 
   для: АЯС   (08.02.2012 в 07:44)
 

Вы просто мега-гуру:) аплодировали стоя.

Все отлично работает, без нареканий, данные отправляет на сервер без потерь, CSS сделала свой, с этим проблем нет.

Огромное вам человеческое спасибо. Вы очень выручили меня

  Ответить  
 
 автор: АЯС   (08.02.2012 в 07:44)   письмо автору
12.6 Кб
 
   для: selma   (07.02.2012 в 02:05)
 

Решение - в аттаче (изображение синей дискетки справа сверху) ===============>

СНАЧАЛА покрутите по-всякому именно ТОТ код, который я вам даю КАК ОН ЕСТЬ ("AS IS").
С точки зрения только и именно его функциональности и удобства.

Если возникнут вопросы/пожелания по моему коду - не стесняйтесь.
-----

А уже ПОТОМ прикиньте применимость этого кода к вашей вёрстке и к вашим нюансам (кои мне неизвестны).
Вполне может быть, что вас что-то не устроит в выбранном мною стиле оформления.
Или что-то где-то может быть надо расположить не так, и не в том месте...
Может, будут какие-то программные конфликты моего кода с вашим - вдруг у вас внутри формы много-много DIV'ов и SPAN'ов, да ещё вдруг и с совпадающими с выбранными мною ID - и мой код как-то влияет на них...
Также не стесняйтесь, спрашивайте.

Всё можно решить.

  Ответить  
 
 автор: selma   (07.02.2012 в 02:05)   письмо автору
 
   для: АЯС   (06.02.2012 в 14:08)
 

Это будет просто: замечательно

Заранее огромное спасибо, за потраченое на меня время. Буду ждать с нетерпением:)

  Ответить  
 
 автор: АЯС   (06.02.2012 в 14:08)   письмо автору
 
   для: selma   (06.02.2012 в 10:20)
 

>"не удобно тыкать каждый раз на "зафиксировать ответ"...

Была идея использовать Jquery для проверки поля на лету, но за незнанием матчасти, в дебри лезть вообще нет смысла. Вы согласны?"


Jquery точно не нужен - с этим я согласен :-)

Насчёт "не тыкать кнопкой" и "на лету" есть следующее соображение.
Можно те самые DIV'ы, о которых я написал выше, использовать как индикатор.
А именно:
1. изначально все DIV'ы прозрачны, т.е. сливаются с фоном.

2. как только юзер приступает к ответам на этот вопрос ("входит" в <textarea>, жмёт радиокнопку, начинает ранжировать) сразу включается проверка "на лету", коя завершается в момент, когда юзер переходит к другому DIV'у..

3. по итогам проверки - если ошибок заполнения нет, то цвет фона этого конкретного DIV'а заменяется на какой-то неяркий - бледно-зелёный, например. А вот если что-то заполнено не так - цвет становится вызывающе ярким, типа красного и внутри этого же DIV'a пишется сообщение об ошибке. Вернулся юзер к заполнению этого ошибочного вопроса - проверка вновь включилась.
Соответственно, если юзер просто "вошёл" в <textarea> и вышел из него, ничего не написав (или ткнул в поле ранга, но прописывать ничего не стал), то цвет остаётся начальным (прозрачным).

3. В итоге, по окончании, когда юзер кликнет на кнопку "Отправить результаты", ему высветится сообщение типа такого:
Вы допустили несколько ошибок заполнения.
Те вопросы, в которых Вы не заполнили текстовое поле (или не отметили радиокнопки) - подсвечены жёлтым цветом.
Те вопросы, в которых Вы произвели ранжирование с использованием повторяющихся или недопустимых цифр, выделены синим цветом.
Исправьте ошибки - подсветка вопроса при правильном заполнении должна стать зелёной.

Так нормально будет? :-)

Определяйтесь и я вам быстренько набросаю код.

Что касается "количества вопросов" - то никаких проблем нет. Хоть три, хоть триста тридцать три.
Хоть все одного типа, хоть - всех трёх.
-----

>"Можно как-то связаться с вами через ICQ или Skype?"
Нельзя, не пользуюсь.
Только через мыло, если надо - bes2002_шавкаlist.ru

  Ответить  
 
 автор: selma   (06.02.2012 в 10:20)   письмо автору
 
   для: АЯС   (06.02.2012 в 07:55)
 

Ещё вопрос к вам. Количество чисел, расставляемых юзером по рангу, оно гарантированно меньше 10 (десяти)
- Определенно до 10

Конечно ваше предложение правильное с техниеской стороны, но со стороны пользователя, опять же не удобно тыкать каждый раз на "зафиксировать ответ".
Поэтому лучше одной кнопкой - "Сохранить результат".

И ошибки все тоже в один алерт можно писать. Думаю больше 10-15 вопросов в 1 тесте (опросе) не будет

Была идея использовать Jquery для проверки поля на лету, но за незнанием матчасти, в дебри лезть вообще нет смысла. Вы согласны?

Итак, кол-во рангов до 10, вариантов тоже думаю до 10

Главное чтобы было возможно создавать N-ное кол-во вопросов с N-ным количеством однотипных (варианты, ранги, текстарии) ответов


Это осуществимо?

P.S: Можно как-то связаться с вами через ICQ или Skype?

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования