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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Все заполненные поля
 
 автор: Ученик   (29.09.2008 в 11:32)   письмо автору
 
 

Можно ли средствами javascript поместить в последний Див все заполненные поля после клика по ссылке? Тоесть теоретически я понимаю как это сделать, а вот практически... У меня сейчас только один вариант в уме, делать 2 формы, во вторую помещать ВСЕ поля которые есть в первой форме, но все скрывать, а после нажатия ссылки скрипт будет проверять какие поля заполнены и просто включать отображения и задавать значения им из первой... Но чем больше полей тем больше будет "весить" страница, да и мне кажется это не самый удачный вариант.
<html>
<body>
<form action="" method="POST">
<div id="cat_1">
<input type="text" name="inp1" value="">
<input type="text" name="inp2" value="">
</div>
<div id="cat_2">
<input type="text" name="inp21" value="">
<input type="text" name="inp22" value="">
<input type="text" name="inp23" value="">
</div>
<a href="">показать заполненные поля</a>
<div id="noEmptyFields">
</div>
</form>
</body>
</html>

  Ответить  
 
 автор: sim5   (29.09.2008 в 12:01)   письмо автору
 
   для: Ученик   (29.09.2008 в 11:32)
 

Можно, а зачем? Если это для проверки заполнения формы, то введенное и так отображено в форме. Вам нужно только определить какие поля не заполнены и выдать пользователю сообщение.

  Ответить  
 
 автор: Ученик   (29.09.2008 в 13:35)   письмо автору
 
   для: sim5   (29.09.2008 в 12:01)
 

Поля не обязательные и их довольно много >60 (сложный поиск по многим критериям)
Вообще все разделы с полями будут скрытыми и показываються только при клике на имя раздела. Вот хотелось чтобы был еще 1 виртуальный раздел с всеми заполненными полями. Чтобы пользователь видел что он навыбирал.

  Ответить  
 
 автор: sim5   (29.09.2008 в 13:42)   письмо автору
 
   для: Ученик   (29.09.2008 в 13:35)
 

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

  Ответить  
 
 автор: Ученик   (29.09.2008 в 14:29)   письмо автору
 
   для: sim5   (29.09.2008 в 13:42)
 

Если брать из приведенного примера. Например пользователь заполнил поля.
<input type="text" name="inp2" value="15"> 

<input type="text" name="inp22" value="Киев"> 
<input type="text" name="inp23" value="90">


После клика по ссылке, которая запустит ф-ю javascript в последнем диве будут эти поля. Все остальные разделы будут скрытыми, но это уже реализовано.

<div id="noEmptyFields"> 
<input type="text" name="inp2" value="15"> 
<input type="text" name="inp22" value="Киев"> 
<input type="text" name="inp23" value="90">
</div>

Мне нужы не просто значения, а именно input поля с которыми можно работать. Наверно я перед этим неправильно выразился.

  Ответить  
 
 автор: sim5   (29.09.2008 в 14:43)   письмо автору
 
   для: Ученик   (29.09.2008 в 14:29)
 

В каком смысле работать? А с полями, которые заполняет пользователь, вы что играетесь? Расскажите подробно "на пальцах" чего вы хотите сделать? Иначе ей богу не понятно, зачем вам дубли полей.

  Ответить  
 
 автор: Ученик   (29.09.2008 в 15:24)   письмо автору
 
   для: sim5   (29.09.2008 в 14:43)
 

Нет, "играться" должны пользователи, точнее у них должна быть такая возможность.

Есть разделы, в которых много разных полей(радио, текстовые, селекты и пр) для задания условий поиска. Все разделы по-умолчанию скрыты(нахотятся в скрытых дивах). По клику на имя раздела появляются все поля этого раздела(полей слишком много чтобы выводить все вряд на странице, будет 3+ листов). Пользователь заполнил например по одному полю в каждом разделе, хочется чтобы был еще один раздел "все заполненные". Чтобы он мог увидеть все заданные им условия, и поменять в случае чего. Особенно удобно будет после того как пользователь воспользовался поиском, и хочет изменить одно из полей, отпадает надобность искать нужное поле по всем разделам.

Раздел 1
поле 1 +
поле 2
поле 3...
Раздел 2
поле 4
поле 5+
поле 6...
Раздел 3
поле 7+
поле 8+

Все заполненные
поле 1 +
поле 5+
поле 7+
поле 8+

  Ответить  
 
 автор: sim5   (29.09.2008 в 15:29)   письмо автору
 
   для: Ученик   (29.09.2008 в 15:24)
 

А если пользователь заполнит не одно поле раздела, а все, и во всех разделах, то ведь и ваше описание "всего выбранного" тоже будет приличной портянкой. Какой смысл в ней тогда? Да и вообще, не моноговато ли будет "много всего" для поиска?

  Ответить  
 
 автор: Ученик   (29.09.2008 в 15:43)   письмо автору
 
   для: sim5   (29.09.2008 в 15:29)
 

Если заполнит все, то да, будет портянка. Но обычно заполняют до 10-15 полей, а вот возможность задачи условий должна быть максимальная. Собственно в том то и загвоздка. Если бы задача была тривиальной, или меня не волновал вес самой страницы я бы сделал так как уже описывал в первом посте. Поэтому и обратился к вам в надежде получить совет, или ответ что это нереализуемо)

  Ответить  
 
 автор: sim5   (29.09.2008 в 16:11)   письмо автору
 
   для: Ученик   (29.09.2008 в 15:43)
 

Да почему не реализуемо, это сделать не сложно. Но вот ваша уверенность "обычно заполняют до 10-15 полей" на чем основана? В сети масса "шутников", а вы обязаны всегда задавать себе вопрос "а если...". То что появится большая портянка, и на мой вгляд никчемная, уж лучше прокрутить страницу чтобы просмотреть выбранное, чем увеличивать для того же самого высоту страницы в два раза. Это не так страшно. Вы представляете, если вас будут закидывать такими запросами на поиск - куча разделов, куча условий... А на стороне клиента снять ограничения, которые вы с помощью JS хотите организовать, труда не составит.
Вы сделайте запрос по этому форуму на посик несложный, засеките время, а потом прикиньте вашу "кучу разделов и условий", как вам кажется?
Ну если у вас не так все страшно, то может быть вы напишите как вы хотите выводить сводную информацию - только параметры введенные пользователем (а вы еще о чекбоксах говорили) и все?

  Ответить  
 
 автор: Ученик   (29.09.2008 в 16:49)   письмо автору
 
   для: sim5   (29.09.2008 в 16:11)
 

Форма поиска только для внутреннего пользования, и обязательно через авторизацию. Шутников не будет) А вот по поводу представления... Если каждое "задаваемое поле", и все что к нему относиться(заголовок и пр.) будут в каком-то блоке(div span p). И потом вывести именно эти блоки, хотя я уже понимаю задача намного усложнилась(да и мой вариант решения задачи уже не подходит), или в javascript'е есть возможность доступа к свойствам родительского блока?.

<div id="Cat_1">
<span id="1">
Название поля: <input type="text" name="inp1">
</span>
<span id="2">
Название поля: Нет <input type="radio" name="inp2" value="0"> Да<input type="radio" name="inp2" value="1">
</span>
<span id="3">
Название поля: 
<select name="opt3">
<option value="0">0</option>
<option value="1">1</option>
</select>
</span>
</div>
<div id="Cat_2">
<span id="4">
Название поля: <input type="text" name="inp4">
</span>
</div>
<div id="Cat_3">
<span id="5">
Название поля: <input type="text" name="inp5">
</span>
</div>

  Ответить  
 
 автор: sim5   (29.09.2008 в 16:53)   письмо автору
 
   для: Ученик   (29.09.2008 в 16:49)
 

Я уже не могу :) Что вам надо вывести - название поля и его значение?

  Ответить  
 
 автор: Ученик   (29.09.2008 в 17:11)   письмо автору
 
   для: sim5   (29.09.2008 в 16:53)
 

Нужно все что внутри блока)

<span id="2"> 
Название поля: Нет <input type="radio" name="inp2" value="0"> Да<input type="radio" name="inp2" value="1"> 
</span>

  Ответить  
 
 автор: sim5   (29.09.2008 в 20:26)   письмо автору
 
   для: Ученик   (29.09.2008 в 17:11)
 

У вас то так, то так... Короче, что и как у вас конкретно, это сами разбирайтесь. Вот пример. Здесь используется элемент LABEL формы, по которым производится циклическая проверка формы. Проверяется тип элемента формы, и если это радиокнопка и она выбрана (в примере первый, это Да), то указывается название поля и ее выбор. Если это текстовый элемент формы, то берется название поля этого элемента и его значение.
<script>
function viewCheck() {
  var mess = "";
  var lab = document.getElementsByTagName('label');
  for(i=0; i<lab.length; i++) {
    var elem = document.getElementById(lab[i].attributes["for"].value);
    if (elem.type == "radio") {
      if (elem.checked) mess += lab[i].innerHTML + ": выбрано<br>";
    } else {
      if (elem.type == "text" && elem.value != "") mess += lab[i].innerHTML + ": " + elem.value;
    }
  }
  document.getElementById("mes").innerHTML = mess;
}
</script>

<form action="" name="as" id="as">
<label for="chk1">Выбор первый</label>:
<input type="radio" name="chk1[]" id="chk1" onclick="viewCheck()"> Да 
<input type="radio" name="chk1[]"> Нет<br>
<label for="txt1">Выбор второй</label>:
<input type="text" name="txt1" onkeyup="viewCheck()">
</form>
<div id="mes"></div>

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

  Ответить  
 
 автор: Ученик   (30.09.2008 в 13:00)   письмо автору
 
   для: sim5   (29.09.2008 в 20:26)
 

Спасибо почти то что нужно, я его немного модифицировал, может подскажите еще как в поля добавить введенные значения?

<script> 
function viewCheck() { 
  var mess = ""; 
  var lab = document.getElementsByTagName('label'); 
  for(i=0; i<lab.length; i++) { 
    var elem = document.getElementById(lab[i].attributes["for"].value); 
    if (elem.type == "radio") { 
      if (elem.checked) mess += lab[i].innerHTML;
    } else { 
      if (elem.type == "text" && elem.value != "") mess += lab[i].innerHTML; 
    } 
  } 
  document.getElementById("mes").innerHTML = mess; 

</script> 

<form action="" name="as" id="as"> 
<label for="chk1">Выбор первый:
<input type="radio" name="chk1[]" id="chk1" onclick="viewCheck()"> Да  
<input type="radio" name="chk1[]"> Нет
<br/>
</label>
<label for="txt1">Выбор второй : 
<input type="text" name="txt1" onkeyup="viewCheck()"> 
<br/>
</label>
</form> 

<div id="mes"></div>

  Ответить  
 
 автор: sim5   (30.09.2008 в 15:21)   письмо автору
 
   для: Ученик   (30.09.2008 в 13:00)
 

В какие поля? Все, что выбирает и вводит пользователь в форме, отображается тут: <div id="mes"></div>

  Ответить  
 
 автор: Ученик   (30.09.2008 в 16:39)   письмо автору
 
   для: sim5   (30.09.2008 в 15:21)
 

Прошу прощения, все верно, в ИЕ работает отлично, первый раз я смотрел в Опере, там появляются только поля и радио кнопки, но текст введенный в поле и выбор радиокнопки не отображается.
Большое спасибо за помощь)

  Ответить  
 
 автор: sim5   (30.09.2008 в 17:05)   письмо автору
 
   для: Ученик   (30.09.2008 в 16:39)
 

Ошибка связана с тем, что я забыл указать id для поля text в примере. Исправьте так:
<input type="text" name="txt1" id="txt1" onkeyup="viewCheck()">
И пример будет работать в Опера.

  Ответить  
 
 автор: Ученик   (06.10.2008 в 18:38)   письмо автору
 
   для: sim5   (30.09.2008 в 17:05)
 

Возникла дополнительная проблема)
Можно ли как то в копируемых полях убирать вызов метода?
<input type="text" name="txt1" id="txt1" onkeyup="viewCheck()">


Иначе сейчас получается все красиво, пользователь заполняет какие-то поля, и все они помещаються в блок "все заполненные", но когда пользователь пытается изменить любое поле из этого блока у него ничего не получается, тк метод этого поля перезаписывает сам себя с предыдущим значением(

  Ответить  
 
 автор: sim5   (08.10.2008 в 07:34)   письмо автору
 
   для: Ученик   (06.10.2008 в 18:38)
 

Зачем копировать поля?

  Ответить  
 
 автор: Ученик   (08.10.2008 в 15:01)   письмо автору
 
   для: sim5   (08.10.2008 в 07:34)
 

Посмотрите мой последний пример кода, заполните текстовое поле, а потом попробуйте изменить значение в созданной скриптом копии...

  Ответить  
 
 автор: sim5   (08.10.2008 в 15:03)   письмо автору
 
   для: Ученик   (08.10.2008 в 15:01)
 

Какой копии? Чего вы копировать хотите?

  Ответить  
 
 автор: Ученик   (08.10.2008 в 16:40)   письмо автору
 
   для: sim5   (08.10.2008 в 15:03)
 

Может я неправильно выражаюсь. Но давайте разберем что делает скрипт, он пробегает по всем элементам label, если поле заполнено "копирует" хтмл из label в нужный блок. Так вот собственно это я "копированием" и называю. В диве mes по-сути создается копия заголовка и поля заполненного пользователем. И если он хочет произвести любое действие в нем скрипт пробегает опять по странице и естественно ставит туда значение из тех инпутов которые в label'ах.

  Ответить  
 
 автор: sim5   (08.10.2008 в 17:21)   письмо автору
 
   для: Ученик   (08.10.2008 в 16:40)
 

Чего тут разбираться? Вам нужно было чтобы где-то отображалось то, что выбрал пользователь, так ведь? Вот этим и занимается скрипт, забирая значения меток, для того чтобы вы видели текст выбранных/заполненных полей формы, и значения этих полей, и помещает это все в DIV. Какие тут могут быть проблемы у пользователя с формой? Этот скрипт не создает копии полей! Не нужно вам показывать значение выбранных/заполненных полей формы в DIV, не помещайте их.

  Ответить  
 
 автор: Ученик   (08.10.2008 в 17:58)   письмо автору
 
   для: sim5   (08.10.2008 в 17:21)
 

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

  Ответить  
 
 автор: sim5   (08.10.2008 в 19:47)   письмо автору
 
   для: Ученик   (08.10.2008 в 17:58)
 

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

  Ответить  
Rambler's Top100
вверх

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