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

HTML+CSS+JavaScript

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

 

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

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

тема: Динамическое добавление блока полей в форме через javascript
 
 автор: JIyKaBbIu   (31.07.2008 в 08:04)   письмо автору
 
 

Здравствуйте,пытаюсь сделать скрипт который бы дублировал "N-ое" количество раз блок определенных html полей, в форме без перегрузки страницы т.е. методом javascript, но с моими скудными познаниями в javascript, ничего не получается, помогите пожалуйста это реализовать, привожу часть формы которую необходимо дублировать:

<? Error_Reporting(E_ALL & ~E_NOTICE);
   require_once(
"config.php");

$companys = array();    
$company_mysql = @mysql_query("SELECT id_sobstvennik AS ID, sobstvennik AS NAME FROM sobstvennik");
while( 
$elem = @mysql_fetch_assoc$company_mysql ) ){
    
$companys[] = $elem;
}
?>

<!-- Номер вагона ------------------------------------------------------------------------------------->

<fieldset>
<legend style="font-weight: bold">Описание подвижного состава</legend>
<table>
<script>
function IIselectCategory()
{
  var cat = document.getElementById("nomer_vagon").value;
  if(cat == -1)
    {document.getElementById("hiddenFieldIII").style.display = "";}
    else {document.getElementById("hiddenFieldIII").style.display = "none";}
}
</script>
<tr><td>Номер вагона:</td>
<td><select name="nomer_vagon" value="<?php echo htmlspecialchars($nomer_vagon); ?>" onchange="IIselectCategory()">
     <option value=""></option>
     <?
        $get_list 
= @mysql_query("SELECT id_vagon, nomer_vagon FROM vagon");
        while (
$elem = @mysql_fetch_array($get_list)){
            if(
$nomer_vagon==$elem['id_vagon']) $temp "selected";
            else 
$temp "";
            echo 
"<option value='$elem[id_vagon]$temp>".$elem['nomer_vagon'];
        }
     
?>
     <option value="-1">Другой</option>
</select>
<input type="text" name="nomer_vagon1" value="" id="hiddenFieldIII" style="display:none;"></td></tr>

<!-- Род вагона -------------------------------------------------------------------------------------->

<tr><td>Род вагона:</td>
<td><select name="rod_vagona" value="<?php echo htmlspecialchars($rod_vagona); ?>">
     <option value=""></option>
     <?
        $get_list 
= @mysql_query("SELECT id_rod_vagona, rod_vagona FROM rod_vagona");
        while (
$elem = @mysql_fetch_array($get_list)){
            if(
$rod_vagona==$elem['id_rod_vagona']) $temp "selected";
            else 
$temp "";
            echo 
"<option value='$elem[id_rod_vagona]$temp>".$elem['rod_vagona'];
        }
     
?>
</select>
</td></tr>

<!-- Собственник вагона ------------------------------------------------------------------------------>

<script>
function IVselectCategory()
{
  var cat = document.getElementById("sobstvennik").value;
  if(cat == -1)
    {document.getElementById("hiddenFieldV").style.display = "";}
    else {document.getElementById("hiddenFieldV").style.display = "none";}
}
</script>
<tr><td>Собственник вагона:</td>
<td><select name="sobstvennik" value="<?php echo htmlspecialchars($sobstvennik); ?>" onchange="IVselectCategory()">
     <option value=""></option>
     <?
foreach( $companys as $company ){
            if( 
$sobstvennik==$company[ID] ){
                
$temp "selected";
            } else {
                
$temp "";
            }
            echo 
"<option value='$company[ID]$temp>".$company['NAME'].'</option>';
            
}
     
?>
     <option value="-1">Другой</option>
</select>
<input type="text" name="sobstvennik1" value="" id="hiddenFieldV" style="display:none;">
</td></tr></table></fieldset>


Я конечно понимаю, что подобные темы не раз поднимались на форуме, но просмотрев их, я понял, что у меня несколько сложней ситуация, и своими силами мне не разобраться, дело в том, что как видно из кода, необходимо дублирование 4 списков, причем все они формируются соответствующими запросами к БД, к тому же у 3 из них при выборе пункта "другое" через javascript появляется поле типа "text", в которое пользователь добавляет новое значение для соответствующего списка, т.е. эти поля тоже должны каким то образом дублироваться и при этом для каждого из продублированных полей должны сгенерироваться уникальные названия, и списки при этом должны быть тоже заполнены из БД, и как это все вместе увязать я ума не приложу.
Заранее благодарен за помощь.

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 16:02)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 08:04)
 

Неужели нет людей способных мне помочь?

  Ответить  
 
 автор: вялый   (31.07.2008 в 16:08)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 16:02)
 

забесплатно в такой простыне никто разбираться не будет

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 16:20)   письмо автору
 
   для: вялый   (31.07.2008 в 16:08)
 

Так вроде ж это открытый форум где опытные программисты помогают начинающим, а не сайт фрилансеров. Жаль конечно.

  Ответить  
 
 автор: вялый   (31.07.2008 в 16:36)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 16:20)
 

вы хотите, чтобы вашу работу делал кто-то другой. Это есть нехорошо. Задавайте конткретные вопросы, типа: что делает этот метод, как мне реализовать такое-то действие, почему вот это выдаёт ошибку в IE. Вы же просто скопипастили весь код и хотите, чтобы мы сами всё сделали и преподнесли вам на блюдечке с каёмочкой.

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 17:05)   письмо автору
 
   для: вялый   (31.07.2008 в 16:36)
 

Я с вами согласен. Но в данной ситуации у меня к сожалению просто нет времени изучать javascript и соответственно спрашивать конкретные вопросы, начальство поручило сделать для них скрипт (часть которого я привел), но не дали полной информации, а когда сроки выполнения подошли к концу, выяснились некоторые "мелочи", которых мне сразу не дали, и эти "мелочи" заставляют кардинально переделывать БД и сам скрипт, и если с БД я справился, то в php скрипте возникла необходимость использовать javascript, с которым я к несчастью практически не знаком, а того времени что у меня осталось просто не хватит на изучение языка, поэтому то я собственно обратился за помощью на форум, а по части необходимого мне скрипта, могу сказать, что по моим прикидкам для человека знающего javascript не составит больших трудностей мне помочь, и одну из проблем, которую я видел в реализации, а именно:
и списки при этом должны быть тоже заполнены из БД
тут данные соответствующих списков, полученные sql запросом для родительских списков, хранить в массивах, а потом через явускрипт для вновь создаваемых полей заполнять эти списки из массива

  Ответить  
 
 автор: вялый   (31.07.2008 в 17:17)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 17:05)
 

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

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 17:34)   письмо автору
 
   для: вялый   (31.07.2008 в 17:17)
 

вообщем если по порядку, то:
1. Необходимо, по нажатию напрмер ссылки "добавить вагон" происходило следующее - дублировался бы каждый из списков блока, выложенного в первом посте, вместе с input'ами, которые открываются для каждого из списков при событии onclick по элементу списка "другой", (это если в списке нет нужного элемента, а значит нет и в базе, добавить его в обработчике запросом взяв значение из соответствующего input) ну и каждый из списков заполнялся бы теми же данными что и родительский список, т.е. который изначально был, при этом для каждого из созданных полей имя каждого из полей бы генерировалось бы по какому то определенному принципу, чтоб потом в обработчике, через цикл можно было б получить значения этих полей зная их имена.
вообщем как то так.
Прошу прощения за излишнюю детальность, надеюсь мои объяснения вам понятны.

  Ответить  
 
 автор: вялый   (31.07.2008 в 17:57)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 17:34)
 

кажется начинаю понимать. При клике на "добавить вагон" нужно взять значения из 3 инпутов, и из этих значений сформировать новые пункты в селектах, и отправить эти данные из инпутов на сервер. Так?

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 18:18)   письмо автору
 
   для: вялый   (31.07.2008 в 17:57)
 

нет не так, наверно я туманно объяснил, извиняюсь. изначально есть 4 списка, которые формируются из sql запроса, (для каждого списка свой запрос), и для 3 из 4 списков есть такие элементы "другой", так вот при выборе этого пункта рядом с соответствующим списком появляется input, (т.е. пока пункт списка "другой" не выбран этот input скрыт) в который пользователь может ввести новое значение, которое после обработки php скрипта запишется в БД, и впоследствии будет выводиться в этом списке, но это я просто объяснил назначение этих input'ов, так вот при нажатии на ссылку "добавить вагон", блок со всеми списками и соответствующими им input'ами должен продублироваться, т.е. должны появиться еще один такой же блок с такими же списками (заполненные такими же данными, что и соответствующие им начальные списки), а также для каждого списка должен появиться input, но пока скрытый, и для всех полей (select'ов и соответствующих им input'ов) должны сгенерироваться их названия по некоторому принципу, чтоб в дальнейшем при передачи данных этой формы методом POST в php обработчик можно было б эти имена полей получить и по этим именам получить значения выбранные в полях (т.е. значение элемента списка, а если в этом списке выбран пункт "другой", то получить значение соответствующего этому списку input'а) и записать в БД. Вообщем попытался описать полностью всю логику работы скрипта. Вроде ничего не упустил.

  Ответить  
 
 автор: вялый   (31.07.2008 в 19:15)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 18:18)
 

", блок со всеми списками и соответствующими им input'ами должен продублироваться, т.е. должны появиться еще один такой же блок с такими же списками (заполненные такими же данными, что и соответствующие им начальные списки)"
т.е. при нажатии "добавить вагон" эти 4 селекта и 3 инпута должны полностью продублироваться, без всяких добавлений в селекты. Правильно?

  Ответить  
 
 автор: JIyKaBbIu   (31.07.2008 в 19:18)   письмо автору
 
   для: вялый   (31.07.2008 в 19:15)
 

да абсолютно правильно

  Ответить  
 
 автор: PAT   (31.07.2008 в 19:17)   письмо автору
 
   для: JIyKaBbIu   (31.07.2008 в 18:18)
 

Сделайте так:

1. Напишите чистый (без PHP-вставок, стилей и прочего дизайн-оформления) HTML-код того, что должен увидеть юзер изначально.

2. Укажите ДЕЙСТВИЕ, которое юзер выполнит (например, так: "в селекте с name="то-то" юзер выберет опшен с текстом "таким-то" и нажмет на кнопку "Продолжить").

3. Напишите чистый HTML-код того, что увидит юзер после этого своего действия.


Тогда, полагаю, ВСЕ и ВСЁ поймут и СРАЗУ помогут.

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

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