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

HTML+CSS+JavaScript

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

 

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

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

тема: Как объединить скрипты?
 
 автор: Port_Artur   (15.03.2010 в 22:56)   письмо автору
 
 

2 зависимых списка, причём 2-й список является динамическим. При выборе в первом с помощью первого скрипта подставляем значения во второй список. Второй список должен быть динамическим (до 5) с возможностью выбора переменных в каждом новом добавленном динамическом списке, которые (переменные) были подставлены во второй список после выбора в первом.
Динамичность второго списка обеспечивает второй скрипт.

Оба скрипта рабочие.

Помогите их объединить. Не знаю даже возможно ли это.
Нужен пример объединения на любых переменных списков. Пожалуйста.

1-й скрипт
<head>
<title>Связанные списки</title>
<script type="text/javascript">
// Данные, как бы из базы, сформированные на стороне сервера.
// Обычно находятся в подключаемом JavaScript файле.
var colorsArray = {

    BentleyAzure : {red:"Красный",green:"Зеленый"},
    ChevroletCorvette : {black:"Черный",blue:"Синий"},
    FerrariEnzo : {green:"Зеленый",black:"Черный",yellow:"Желтый"}

}
// Функция, заполняющая список цветами доступными для выбранной модели.
function getColors(_this){
    var colors = colorsArray[_this.value];
    var _select = document.getElementById("colors");
    _select.innerHTML = ""; // Удаляем всех потомков.

    for(var i in colors){ // Добавляем доступные цвета.
        var option = document.createElement("option");
        var optionText = document.createTextNode(colors[i]);
        option.appendChild(optionText);
        option.setAttribute("value",i);
        _select.appendChild(option);
    }

    // Делаем список цветов видимым.
    _select.style.display="inline";
}
</script>
</head>


<body>
<form action="#" method="get">

Модели
<select id="models" name="models" onchange="getColors(this)">

  <option value="BentleyAzure">Bentley Azure</option>
  <option value="ChevroletCorvette">Chevrolet Corvette</option>
  <option value="FerrariEnzo">Ferrari Enzo</option>

</select>
<br/>

Цвета
<select id="colors" name="colors"></select>
<br/>
<input type="submit" value="Выбрать" />


</form>
</body>


2-й скрипт.
<html>    
<head>    
<title>Динамическое добавление группы полей по желанию пользователя</title>    
<script language="JavaScript">    
var items=1;    
function AddItem() {    
  if (items >= 5)  
    return;  
  div=document.getElementById("items");    
  button=document.getElementById("add");
  items++;    
  newitem="<span id=\"a" + items;    
  newitem+="\"><strong>Описание </strong>";    
  newitem+="<input type=\"text\" ID=\"it" + items;   
  newitem+="name=\"item" + items;    
  newitem+="\" size=\"35\">";

  newitem+="<a href=\"#\" onclick=\"a('a"+ items;    
  newitem+="')\">удалить</a><br></span>"; 
  
  newnode=document.createElement("span");    
  newnode.innerHTML=newitem;
  
    
 div.insertBefore(newnode,button);
  
 if (items == 5){
  b('add')
}
  
}    

function a(x){    
r=document.getElementById(x);    
r.parentNode.removeChild(r);    
items=items-1;

  if (items == 4){

document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">"; 
      }


  



function b(x){    
r=document.getElementById(x);    
r.parentNode.removeChild(r); }

</script>    


<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>    
<body>    
<form name="form1">    
<div ID="items">    
<span id='a1'>    
<strong>Описание</strong> <input type="text" ID="it1" name="item1" size="35"><br>   
</span>    
<input type="button" value="Добавить" onClick="AddItem();" ID="add" class="b">    
</div>    
</form>    

</body>    
</html>

  Ответить  
 
 автор: Port_Artur   (16.03.2010 в 22:50)   письмо автору
 
   для: Port_Artur   (15.03.2010 в 22:56)
 

Пытаюсь разобраться и объединить 2 скрипта написанные выше.
Не могу понять:
1. Почему не работает цикл FOR (выделенный жирным)?

 for ( var i in colors ) 
            { 
            newitem1+="<option value=\"" + i; 
            newitem1+=">"+colors[i]; 
            newitem1+="</option>"; 
            }


и
2. Почему не добавляется кнопка в функции getColors(_this)?

 if (items == 1){
                  document.getElementById("it").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">";
                 }


<html>
<head>
<title>Динамическое добавление группы полей по желанию пользователя</title>

<script type="text/javascript">
// Данные, как бы из базы, сформированные на стороне сервера.
// Обычно находятся в подключаемом JavaScript файле.
var colorsArray = {

    BentleyAzure : {red:"Красный",green:"Зеленый"},
    ChevroletCorvette : {black:"Черный",blue:"Синий"},
    FerrariEnzo : {green:"Зеленый",black:"Черный",yellow:"Желтый"}

}
var items=0;
// Функция, заполняющая список цветами доступными для выбранной модели.
function getColors(_this){
    var colors = colorsArray[_this.value];



  div=document.getElementById("items");
  inp= document.getElementById("it");
  items++;

      newitem1="<span id=\"a" + items;
      newitem1+="\"><select id=\"colors"+ items;
      newitem1+=" name=\"colors"+ items;
      newitem1+=">";
      //цикл почему-то не работает добавляют не все цвета определённого автомобиля, а только второй.
        for ( var i in colors )
            {
            newitem1+="<option value=\"" + i;
            newitem1+=">"+colors[i];
            newitem1+="</option>";
            }

      newitem1+="</select><br></span>";

    newnode=document.createElement("span");
    newnode.innerHTML=newitem1;

    div.insertBefore(newnode,inp);

//    Добавляем кнопку с помощью которой добиваемся диначности полей с цветами
  if (items == 1){
                  document.getElementById("it").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">";
                 }

     }

function AddItem() {
  if (items >= 5)
    return;

  div=document.getElementById("items");
  inp= document.getElementById("it");
  items++;

      newitem1="<span id=\"a" + items;
      newitem1+="\"><select id=\"colors"+ items;
      newitem1+=" name=\"colors"+ items;
      newitem1+=">";
        for(var i in colors)
            {
            newitem1+=" <option value=\"" + i;
            newitem1+=">"+colors[i];
            newitem1+="</option>";
            }
      newitem1+="</select>";
      newitem1+="<a href=\"#\" onclick=\"a('a"+ items;
      newitem1+="')\">удалить</a><br></span>";

  newnode=document.createElement("span");
  newnode.innerHTML=newitem1;

  div.insertBefore(newnode,inp);

if (items == 4){
               document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">";
               }

if (items == 1){
               document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">";
               }

 if (items == 5){
  b('add')
}

}

function a(x){
r=document.getElementById(x);
r.parentNode.removeChild(r);
items=items-1;

if (items == 4){

document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" class=\"b\">";
      }



}


function b(x){
r=document.getElementById(x);
r.parentNode.removeChild(r); }

</script>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<form name="form1">
<span id='a0'>
<select id="models" name="models" onchange="getColors(this)">

  <option value="BentleyAzure">Bentley Azure</option>
  <option value="ChevroletCorvette">Chevrolet Corvette</option>
  <option value="FerrariEnzo">Ferrari Enzo</option>

</select>
</span>

<div ID="items">

<INPUT TYPE="TEXT" ID="it" NAME="tema" SIZE="75" MAXLENGTH="70"></TD>
</div>
</form>

</body>
</html>

  Ответить  
 
 автор: АЯ   (17.03.2010 в 02:51)   письмо автору
 
   для: Port_Artur   (16.03.2010 в 22:50)
 

1. Добавлять поля в форму следует методом appendChild (), предварительно создавая эти поля методом createElement ().

2. Назначать скриптовые инструкции на события во вновь добавленных полях следует методами attachEvent () и addEventListener ()

3. Удалять опшены из списка (и поля из формы) следует методом removeChild (), а добавлять новые опшены в список надо методом add ().


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

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 08:34)   письмо автору
 
   для: АЯ   (17.03.2010 в 02:51)
 

Да я вообще не знаю Java. Вот и попросил объединить скрипты. Сложил из 2-х скриптов 1, как смог. Но похоже не всё сошлось. Помогите Пожалуйста доработать последний скрипт (сложенный из 2-х). У меня что -то дальше совсем никак не идёт. Вроде и ошибок не вижу и не работает.

И у Вас как то 1 и 3 пункт не совсем стыкуются то одним добавлять то другим. Ну я что-то запутался. Чем же всё таки.

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 08:51)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 08:34)
 

Изменил

 div.insertBefore(newnode,inp);


на

 div.appendChild(newnode); 


Цикл почему не работает? Вы мне так и не ответили!

for ( var i in colors ) 
            { 
            newitem1+="<option value=\"" + i; 
            newitem1+=">"+colors[i]; 
            newitem1+="</option>"; 
            }

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 10:36)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 08:51)
 

Почему добавляемая кнопка не работает?

if (items == 1){  
               newitem5="<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\">";  
newnode=document.createElement("span");  
  newnode.innerHTML=newitem5;  

      div.appendChild(newnode); 
                } 


И по прежнему не могу понять почему цикл не работает?!
Помогите решить эти 2 проблемы.



<html> 
<head> 
<title>Динамическое добавление группы полей по желанию пользователя</title> 

<script type="text/javascript"> 
// Данные, как бы из базы, сформированные на стороне сервера. 
// Обычно находятся в подключаемом JavaScript файле. 
var colorsArray = { 

    BentleyAzure : {red:"Красный",green:"Зеленый"}, 
    ChevroletCorvette : {black:"Черный",blue:"Синий"}, 
    FerrariEnzo : {green:"Зеленый",black:"Черный",yellow:"Желтый"} 


var items=0; 
// Функция, заполняющая список цветами доступными для выбранной модели.

 
function getColors(_this){ 
    var colors = colorsArray[_this.value]; 



  div=document.getElementById("itemss"); 

  items++; 


  if (items == 1){ 
      newitem3="<span id=\"a" + items; 
      newitem3+="\">"+ _this.value;
      newitem3+="<br></span>";
      b('a0')
      newnode=document.createElement("span"); 
      newnode.innerHTML=newitem3; 

    div.appendChild(newnode); }



      newitem1="<span id=\"a" + items; 
      newitem1+="\"><select id=\"colors"+ items; 
      newitem1+=" name=\"colors"+ items; 
      newitem1+=">"; 
      //цикл почему-то не работает добавляют не все цвета определённого автомобиля, а только второй. 
        for ( var i in colors ) 
            { 
            newitem1+="<option value=\"" + i; 
            newitem1+=">"+colors[i]; 
            newitem1+="</option>"; 
            } 

      newitem1+="</select><br></span>"; 

    newnode=document.createElement("span"); 
    newnode.innerHTML=newitem1; 

    div.appendChild(newnode); 

//    Добавляем кнопку с помощью которой добиваемся диначности полей с цветами 
  if (items == 1){ 
               newitem5="<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\">"; 
newnode=document.createElement("span"); 
  newnode.innerHTML=newitem5; 

      div.appendChild(newnode);
                } 

     } 

function AddItem() { 
  if (items >= 5) 
    return; 

  div=document.getElementById("itemss"); 

  items++; 

      newitem1="<span id=\"a" + items; 
      newitem1+="\"><select id=\"colors"+ items; 
      newitem1+=" name=\"colors"+ items; 
      newitem1+=">"; 
        for(var i in colors) 
            { 
            newitem1+=" <option value=\"" + i; 
            newitem1+=">"+colors[i]; 
            newitem1+="</option>"; 
            } 
      newitem1+="</select>"; 
      newitem1+="<a href=\"#\" onclick=\"a('a"+ items; 
      newitem1+="')\">удалить</a><br></span>"; 

  newnode=document.createElement("span"); 
  newnode.innerHTML=newitem1; 

      div.appendChild(newnode);

if (items == 4){ 
               document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" 

onClick=\"AddItem();\" ID=\"add\" class=\"b\">"; 
               } 

if (items == 1){ 
               document.getElementById("items").innerHTML += "<input type=\"button\" value=\"Добавить\" 

onClick=\"AddItem();\" ID=\"add\" class=\"b\">"; 
               } 

 if (items == 5){ 
  b('add') 




function a(x){ 
r=document.getElementById(x); 
r.parentNode.removeChild(r); 
items=items-1; 

if (items == 4){ 

document.getElementById("itemss").innerHTML += "<input type=\"button\" value=\"Добавить\" onClick=\"AddItem();\" ID=\"add\" 

class=\"b\">"; 
      } 






function b(x){ 
r=document.getElementById(x); 
r.parentNode.removeChild(r); } 

</script> 


<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head> 
<body> 
<form name="form1"> 
<span id='a0'> 
<select id="models" name="models" onchange="getColors(this);"> 

  <option value="BentleyAzure">Bentley Azure</option> 
  <option value="ChevroletCorvette">Chevrolet Corvette</option> 
  <option value="FerrariEnzo">Ferrari Enzo</option> 

</select> 
</span> 

<div ID="itemss"> 


</div> 
<INPUT TYPE="TEXT" ID="it" NAME="tema" SIZE="75" MAXLENGTH="70"></TD> 
</form> 

</body> 
</html>

  Ответить  
 
 автор: АЯ   (17.03.2010 в 10:53)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 08:34)
 

Извините, непонятно, что именно вам надо.

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

Далее - ничего не понятно.
Зачем вам кнопка с надписью "Добавить"?
Когда эта кнопка появляется? Или она всегда есть?
Что именно и куда она должна добавлять?

Напишете ПОНЯТНЫМ русским языком - помогу.

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 11:06)   письмо автору
 
   для: АЯ   (17.03.2010 в 10:53)
 

Да, первый список с автомобилями статический. При выборе автомобиля список выбора автомобилей заменяется текстовым названием автомобиля, чтобы после выбора нельзя было заменить. В это время добавляется поле с цветами автомобиля и кнопка Добавить. Возле первого поля с цветами не добавляем ссылку на его удаление "Удалить", так как меньше 1-го поля не долно быть. Возле остальных полей добавляется ссылка "Удалить" на удаление данного поля. Кнопка Добавить позволяет ещё добавлять поля с цветами автомобиля, выбранного в первом статическом поле. Максимальное количество полей с цветами 5. Если уже добавлено 5 полей то кнопка "Добавить" удаляется. Поля с цветами автомобилей можно удалять. Если полей с цветами стало меньше 5, то снова добаляем кнопку Добавить.

Если что-то не понятно - спросите поясню.

  Ответить  
 
 автор: АЯ   (17.03.2010 в 11:50)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 11:06)
 

1. Да, первый список с автомобилями статический. При выборе автомобиля список выбора автомобилей заменяется текстовым названием автомобиля, чтобы после выбора нельзя было заменить. -- OK

2. В это время добавляется поле с цветами автомобиля -- что значит "поле с цветами"?
"Список с цветами" - я понимаю.
А "поле с цветами" - не понимаю.
Поле - это <input>. Как в это одно поле записать целых три цвета для, например, FerrariEnzo? Вместе с русскими и английскими названиями цветов? Через пробелы, что-ли?

Мей би вы хотите раскрытый список (тег <select size="3">) c тремя опшенами? Где видимы будут сразу все три цвета по-русски (а английские значения будут записаны в их value)?

Или вам надо три подряд поля <input>? А куда тогда value из массива записывать?

Что вам надо-то?

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 12:06)   письмо автору
 
   для: АЯ   (17.03.2010 в 11:50)
 

Списки с цветами, не поля - извините я был не точен.

1 статический список с автомобилями и 5 динамических списков с цветами автомобиля, выбранного в первом статическом списке.

  Ответить  
 
 автор: АЯ   (17.03.2010 в 12:28)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 12:06)
 

Опять ничего не понял.

Давайте определимся с терминами.
1. Список - это тег <select>
2. Внутрь тега <select> входят опшены (теги <option>), у каждого из которых есть текст (что видит пользователь) и value (которое пользователь не видит).
3. Опшенов в списке может быть любое количество - от одного и до любого разумного количества.


Ткнул ваш пользователь в первом списке на Феррари.
Я так понимаю, что у вас должен появиться второй (динамический) список с тремя опшенами, в каждом из которых будет свой свой цвет (на русском - видимый пользователю, на английском - в значении value)

Нафига вам еще 4 списка для автомобиля феррари? Что в них вы будете писать?
Может быть вы хотите добавить еще до 5-ти опшенов в открывшийся второй список?
Т.е. открылся у вас список, состоящий из трех опшенов:
Зеленый
Черный
Желтый
и вы хотите иметь возможность В ЭТОТ (один-единственный) список добавить еще и Синий, например, и Красный (довести количество опшенов в списке до максимум пяти).
Так?

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 12:41)   письмо автору
 
   для: АЯ   (17.03.2010 в 12:28)
 

Ткнул пользователь в Феррари - появляется список (на русском - видимый пользователю, на английском - в значении value) с количеством опшенов соответсвующем количеству цветов данного автомобиля. Данный список удалить нельзя но должна быть возможность добавить ещё 4 таких же списка с цветами выбранного автомобиля - для чего и нужна кнопка добавить. И вот уже эти 4 списка можно удалять для чего напротив них добавляем кнопку "Удалить". Если создали 5 списков кнопку "Добавить" удаляем. Если меньше пяти списков с цветами, - опять добавляем кнопку Добавить.

Список - это Select
Цвета - опшены.

Не заморачивайтесь Вы со смыслом - это просто пример для реализации нужного Java скрипта.

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 16:30)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 12:41)
 

С циклом разобрался - пропустил " в строке

newitem1+=">"+colors[i];


а должно быть так

newitem1+="\">"+colors[i];


Но вот почему добавляемая кнопка не вызывает функцию добавления ещё одного списка - понять не могу!?!

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 22:17)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 16:30)
 

Как переменную colors из функции getColors передать в функцию AddItem. Или как её сделать глобальной?

  Ответить  
 
 автор: Port_Artur   (17.03.2010 в 22:55)   письмо автору
 
   для: Port_Artur   (17.03.2010 в 22:17)
 

Разобрался! Переменные надо объявлять глобальными за пределами функций, тогда всё работает.

Вопрос объединения скриптов решён.

Спасибо АЯ за помощь

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

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