Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   не вставляются значения в div (https://javascript.ru/forum/dom-window/67147-ne-vstavlyayutsya-znacheniya-v-div.html)

dantist433 31.01.2017 11:32

не вставляются значения в div
 
я новичок, поэтому прошу сильно камнями не кидаться.
var unit_res=[]; 
var res_population=[]; 
var max_population=[];

<?php
for ($i=0; $i<$count_res1; $i++)
{ 
  echo "unit_res[".$i."]= Array (".$res1[$i][0].",".$res1[$i][1].",".$res1[$i][2].",".$res1[$i][3].");"; 
  echo "res_population[0]=Math.floor(wood/".$res1[$i][0]."); ";
  echo "res_population[1]=Math.floor(clay/".$res1[$i][1]."); ";
  echo "res_population[2]=Math.floor(iron/".$res1[$i][2]."); ";
  echo "res_population[3]=Math.floor(crop/".$res1[$i][3]."); ";	
  echo " count_res_pop = res_population.length, min = res_population[0]; 
  while (count_res_pop--) 
  {  if (res_population[count_res_pop] < min)
   {
        min = res_population[count_res_pop];
           }
  }
      ";  
      
  echo "if (min<population) {max_population[".$i."]=min} else {max_population[".$i."]=population}";  
  echo "alert(max_population[".$i."]);";// потом убрать  
     /*ЧТО ТО ВОТ ТУТ НЕ ТАК*/
    echo "window.onload = function() 
    {     
 document.getElementById('max_unit'+".$i.").innerHTML = max_population[".$i."]; 
  };";
  /*Конец чего не так*/
   echo "window.addEventListener('DOMContentLoaded', function() {
   var form = document.querySelector('form');
    form.addEventListener('input', function(e){
        var el = e.target;                                                                      
        el.classList.contains('text'+".$i.") && el.classList[ (el.value>max_population[".$i."])?'add':'remove'] ('RedText'); });}); ";
 
}  
?>


<form name = "units" method="post" action="timers/units_t.php?town=<?php echo $town_id;?>"  onsubmit="return validate_form ( );">
<table>
<tr>
<td>Единица</td><td>Требуется</td><td>В деревне/Всего</td><td>Призыв</td><td></td>
</tr>
<tr>
<td>Юнит1</td><td>Тут будут ресы</td><td>В деревне/Всего</td><td> <input class="text0" size="3" id="unit1" name = 'unit1'></td><td><div id='max_unit0'></div></td>
</tr>
<tr>
<td>Юнит2</td><td>Тут будут ресы</td><td>В деревне/Всего</td><td> <input class="text1" size="3" id="unit2" name='unit2'></td><td><div id='max_unit1'></div></td>
</tr>
<tr>
<td>Юнит3</td><td>Тут будут ресы</td><td>В деревне/Всего</td><td> <input class="text2" size="3" id="unit3" name='unit3'></td><td><div id='max_unit2'></div></td>
</tr>
</table>
 <p><input type="submit"></p>
 </form>


Сейчас вставляется только последнее значение в <div id='max_unit2'>
А надо что бы вставляло в каждый див значение.

И если будут еще какие нить замечания по коду- пишите

ksa 31.01.2017 11:35

dantist433, это какой-то суп-набор из ПХП, ХТМЛ и JS...

Ты осилишь сделать нормальный ХТМЛ и JS тестовый пример?

dantist433 31.01.2017 11:41

могу весь файл кинуть, может так понятнее будет?

ksa 31.01.2017 11:41

Цитата:

Сообщение от dantist433
window.onload = function(){}

Объявляя т.о. обработчики в цикле, ты меняешь их каждый раз, один на другой.
Т.ч. либо генери внутренности иначе... Или используй другой способ навешивания обработчиков... ;)

ksa 31.01.2017 11:42

Цитата:

Сообщение от dantist433
могу весь файл кинуть

Это все из серии "Могу копать. Могу и не копать...". :D
Расширять нужно свои "умения". ;) Например учиться делать нормальные тестовые примеры.

dantist433 31.01.2017 11:43

Цитата:

Сообщение от ksa (Сообщение 442775)
Объявляя т.о. обработчики в цикле, ты меняешь их каждый раз, один на другой.
Т.ч. либо генери внутренности иначе... Или используй другой способ навешивания обработчиков... ;)

На большее у меня пока опыта на хватает

ksa 31.01.2017 11:45

Цитата:

Сообщение от dantist433
На большее у меня пока опыта на хватает

Опыт тут ни при чем... :no:
Тут знания нужно наращивать. ;)
https://learn.javascript.ru/introduction-browser-events

dantist433 31.01.2017 11:48

Так и учусь, что то на форуме подсказывают, что то сам на основании примеров,

ksa 31.01.2017 11:51

Цитата:

Сообщение от dantist433
Так и учусь, что то на форуме подсказывают, что то сам на основании примеров

Т.е. книжки читать тебя не заставишь? :blink:

dantist433 31.01.2017 11:57

ну книжки это само собой, например
написали мне на форуме или в примере что то например
for (var i = 1; i < 10; i++) {alert (i);}
если я не знаю какие то операторы и что они выполняют- обращаюсь к книжкам

dantist433 31.01.2017 12:02

Но я разобрался, спасибо за подсказку
у меня же есть
window.addEventListener('DOMContentLoaded', function())

вот в эту функцию и запихнул.

ksa 31.01.2017 13:44

Цитата:

Сообщение от dantist433
я разобрался

Все равно, что-то мне подсказывает, что ты роешь подземный ход на чердак... :(

dantist433 31.01.2017 22:55

Цитата:

Сообщение от ksa (Сообщение 442797)
Все равно, что-то мне подсказывает, что ты роешь подземный ход на чердак... :(

Все может быть
привел код в более менее понятный вид
var max_population=Array (16,5,4);

for (var i = 0; i < 3; i++)
{    
window.addEventListener('DOMContentLoaded', function() 
   {
   
   inp2 = document.createElement( 'input' );
   inp2.type = 'button';
   inp2.name = 'input_2';
   inp2.id = 'max_unit'+i;
   inp2.value = max_population[i];
   document.getElementById( 'units' ).appendChild( inp2 );
      
   var address = document.getElementById('max_unit'+i);
   var favoriteAddress = document.getElementById('unit'+i) ;
   
   if (address.value!=0)
   {   document.getElementById('max_unit'+i).onclick = function() {favoriteAddress.value=address.value ;address.value=0;  }   
   }
   else
    {   document.getElementById('max_unit'+i).onclick = function() {address.value=favoriteAddress.value ;favoriteAddress.value=5;  }  
    }

var form = document.querySelector('form');
form.addEventListener('input', function(e)
{
var el = e.target;                                                                      
el.classList.contains ('text'+i) && el.classList[ (el.value>max_population[i])?'add':'remove'] ('RedText'); 
});
});
}

<form name = "units" method="post" id="units" action="timers/units_t.php"  onsubmit="return validate_form ( );">
<table>

<tr>
<td>111</td><td>111</td><td>111</td><td> <input class="text0" size="3" id="unit0" name = 'unit0'></td><td></td>
</tr>
<tr>
<td>222</td><td>222</td><td>222</td><td> <input class="text1" size="3" id="unit1" name='unit1'></td><td></td>
</tr>
<tr>
<td>333</td><td>333</td><td>333</td><td> <input class="text2" size="3" id="unit2" name='unit2'></td><td></td>
</tr>
</table>
 <p><input type="submit"></p>
 </form>


И тут возникло сразу 2 вопроса:
1. Такое чувство что переменная i из for не передается в функцию, как это исправить???
Так как max_population[i] у меня получается undefined, а перед функцией все норм
2. Когда она передается(а у меня через PHP она передается) то при 1 нажатии значения передаются в инпут, а при повторном нажатии не передается обратно, как будто это условие не отрабатывает
if (address.value!=0)
   {   document.getElementById('max_unit'+i).onclick = function() {favoriteAddress.value=address.value ;address.value=0;  }   
   }
   else
    {   document.getElementById('max_unit'+i).onclick = function() {address.value=favoriteAddress.value ;favoriteAddress.value=5;  }  
    }

опять же вопрос почему?

ksa 01.02.2017 08:54

Цитата:

Сообщение от dantist433
Все может быть

Для меня считается аксиоматичным следующий факт. Если страница формируется серверным скриптом, то нет особого смысла генерить еще и функции, которые "доделают" ее еще и не клиенте.
Это все может сделать мощный сервер сразу. Без всякой нагрузки на клиент.

У тебя же получается какая-то каша, в которой ты путаешься сам.

Совет еще такой...
Сначала сделай сам хтмл и JS который будет в итоге. Если все там заработает как нужно - можно переходить к генерации этого хтмл и JS.
А пока ты гененрируешь то, что даже не понимаешь чего получается в итоге и как потом это все работает. :)

Твои вопросы получаются из серии "Я вот тут чего-то нагененрил... Но оно не работает или работает как то так, что мне не понятно..."
А ты должен четко понимать чего ты там генеришь.
Т.ч. начни все с простых хтмл и JS. Сделаешь там - пробуй генерить серверным скриптом.

Dilettante_Pro 01.02.2017 10:53

dantist433,
Цитата:

Сообщение от dantist433
Такое чувство что переменная i из for не передается в функцию, как это исправить???

Цикл должен быть включен в
window.addEventListener('DOMContentLoaded', function() 
   {
});

а не наоборот, как у вас


Часовой пояс GMT +3, время: 00:30.