Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как правильно задать ID в создаваемом элементе ? (https://javascript.ru/forum/events/11714-kak-pravilno-zadat-id-v-sozdavaemom-ehlemente.html)

Indiana 09.09.2010 10:45

Как правильно задать ID в создаваемом элементе ?
 
Здравствуйте, Господа!
На днях нарисовал вот такое чудовище:
<script>
    a=[];
    a[0]=100;
    a[1]=200;
    a[2]=300;
    a[3]=400;
    a[4]=500;
    a[5]=600;

    b=[];
    b[0]='самолет';
    b[1]='чайник';
    b[2]='утюг';
    b[3]='кефир';
    b[4]='стол';
    b[5]='арбалет';

    h=[];
    h[0]=h0;
    h[1]=h1;
    h[2]=h2;
    h[3]=h3;
    h[4]=h4;
    h[5]=h5;
 
function fr(i){
 
 var div=document.createElement('div');
  div.innerHTML='Вы выбрали '+b[i]+' ( '+a[i]+' руб. ) '
+'<input type="text" id="h[i]" value="1" onKeyUp="pr(i)"  size="5" 
 />'+' шт.';
    alert(h[i]);
     mid.appendChild (div);
}

</script>

:lol: :lol: :lol: да, можно смеяться!
при нажатии на кнопочку
<input  type="button" value="tratata" onclick="fr(4)">

вот здесь
<div name="mid" id="mid"></div>

появляется строка:
"Вы выбрали стол ( 500 руб. ) (здесь еще input) шт.".

Алерт в функции для того, чтобы узнать ID инпута, но он выдает undefined , т.е. я так понимаю ID так не задать.
:agree: можно прекратить смеяться.

Подскажите пжл. как правильно задать ID в создаваемом элементе , т.к.
кнопок много и не хочется для каждой рисовать отдельную функцию.
Заранее благодарен!

inGray 09.09.2010 10:51

<input id="4" type="button" value="tratata" onclick="fr()">

А в функции через this обращаться к id и далее по задаче...:-?

рони 09.09.2010 11:04

h[0]=h0; = > h[0]='h0';

id="h[i]" = > id="'+h[i]+'"

и того
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
</head>

<body>
<script>
    a=[];
    a[0]=100;
    a[1]=200;
    a[2]=300;
    a[3]=400;
    a[4]=500;
    a[5]=600;

    b=[];
    b[0]='самолет';
    b[1]='чайник';
    b[2]='утюг';
    b[3]='кефир';
    b[4]='стол';
    b[5]='арбалет';

    h=[];
    h[0]='h0';
    h[1]='h1';
    h[2]='h2';
    h[3]='h3';
    h[4]='h4';
    h[5]='h5';

function fr(i){

 var div=document.createElement('div');
  div.innerHTML='Вы выбрали '+b[i]+' ( '+a[i]+' руб. ) '
+'<input type="text" id="'+h[i]+'" value="1" onKeyUp="pr('+i+')"  size="5" onclick="alert(this.id)" />'+' шт.';
  document.getElementById('mid').appendChild (div);
}

</script>
<input  type="button" value="tratata" onclick="fr(4)">


<div name="mid" id="mid"></div>

</body>

</html>

Indiana 09.09.2010 12:11

Вау....ожидал:"Да ты тупой" или "Что ты делаешь в JS"....
Спасибо.....отпишу о результатах

Indiana 11.09.2010 12:36

можно я еще потуплю ?
function fr(i){
 var div=document.createElement('div');
  div.innerHTML='Вы выбрали '+b[i]+' ( '+a[i]+' руб. ) '
+'<input type="text" id="'+h[i]+'" value="1" onKeyUp="pr('+i+')"  size="5" onclick="alert(this.id)" />'+' шт.'+'  <span id="q1" >введите кол-во</span>';
  document.getElementById('mid').appendChild (div);
}

задали ID, затем
function pr(i){
var f=a[i];

var g=document.getElementById("'+h[i]+'").value;
var p=f*g;
document.getElementById('q1').innerHTML = p;
}

то происходит вот что:
document.getElementById("'+h[i]+'") is null

а если в input id="'+h[i]+'" поменять на id="homyakpoklonikvolta", ну или просто id="z" и g=document.getElementById("z").value; то скрипт работает, а это не совсем то (точнее совсем не то), что я хотел.
Толкните пжл. в нужную сторону, подскажите , что я не так сделал?

рони 11.09.2010 13:09

function pr(i){
var f=a[i];
var g=document.getElementById(h[i]).value;
if(Number(g))document.getElementById('q1').innerHTML=f*Number(g);
}

Indiana 11.09.2010 14:45

Цитата:

Сообщение от рони (Сообщение 70427)
var g=document.getElementById(h[i]).value;

}

Рони, спасибо!
А я этот вар. тоже пробовал, но h[i] у меня в кавычках был.
Да, через НЕТ можно фотошоп изучить, а JS все же лучше хотя бы на курсах.
Еще раз спасибо.

Indiana 11.09.2010 15:58

Ну как-то так:
<html><head>
</head>
<body>


<script>
    a=[];
    a[0]=100;
    a[1]=200;
    a[2]=300;
    a[3]=400;
    a[4]=500;
    a[5]=600;
 
    b=[];
    b[0]='самолет';
    b[1]='чайник';
    b[2]='утюг';
    b[3]='кефир';
    b[4]='стол';
    b[5]='арбалет';
 
    h=[];
    h[0]='h0';
    h[1]='h1';
    h[2]='h2';
    h[3]='h3';
    h[4]='h4';
    h[5]='h5';

    g=[];
    g[0]='g0';
    g[1]='g1';
    g[2]='g2';
    g[3]='g3';
    g[4]='g4';
    g[5]='g5';

    p=[];
    p[0]='p0';
    p[1]='p1';
    p[2]='p2';
    p[3]='p3';
    p[4]='p4';
    p[5]='p5';
 

function fr(i){
 
 var div=document.createElement('div');
  div.innerHTML='<strong>'+b[i]+'</strong>'+'<br />'+'цена: '+a[i]+' руб. '
+'<input type="text" id="'+h[i]+'" value="0" onKeyUp="pr('+i+')"  size="5"  />'+' шт.'+'  <span id="'+p[i]+'" >введите кол-во</span>';
  document.getElementById('mid').appendChild (div);
  }
function pr(i){
var g=document.getElementById(h[i]).value;
var f=a[i];
if(Number(g))
document.getElementById(p[i]).innerHTML=f*Number(g);
}


function obsh(){

var tb= document.getElementById('mid');
var spanArray  = tb.getElementsByTagName('span');
var sum = 0;
for (j = 0; j < spanArray.length; j++) {
sum = sum + parseFloat(spanArray[j].innerHTML);}
document.getElementById('total').innerHTML = sum;  
}
</script>


<input  type="button" value="самолет" onclick="fr(0)"><br />
<input  type="button" value="чайник" onclick="fr(1)"><br />
<input  type="button" value="утюг" onclick="fr(2)"><br />
<input  type="button" value="кефир" onclick="fr(3)"><br />
<input  type="button" value="стол" onclick="fr(4)"><br />
<input  type="button" value="арбалет" onclick="fr(5)"><br />

 


<form name="mainform"  method="post" action="mail.php">

<div name="mid" id="mid"></div>


<input  type="button" value="итого:" onclick="obsh()">
<span id='total' name='total'></span>

</form>

</body>
</html>

корявенько, громоздко и даже возможно смешно, но немного CSS, HTML и фотошопа и интернет-магазин заработает (просто один малый за подобное попросил 10 килорублей)
Рони, огромное мерси за помощь!!!!

рони 12.09.2010 04:12

:write:
function obsh(){

var tb= document.getElementById('mid');
var spanArray  = tb.getElementsByTagName('span');
var sum = 0;
for (j = 0; j < spanArray.length; j++) {
if(parseFloat(spanArray[j].innerHTML))sum += parseFloat(spanArray[j].innerHTML);}
document.getElementById('total').innerHTML = sum;
}

Indiana 13.09.2010 12:33

не большая модернизация
function fr(i){
if (document.getElementById(h[i])) {
 
  alert('Этот товар уже в корзине');}
    else {
 
 var div=document.createElement('div');
  div.innerHTML='<strong>'+b[i]+'</strong>'+'<br />'+'цена: '+a[i]+' руб. '
+'<input type="text" id="'+h[i]+'" value="0" onKeyUp="pr('+i+')"  size="5"  />'+' шт.'+'  <span id="'+p[i]+'" >введите кол-во</span>';
  document.getElementById('mid').appendChild (div);
  }
  }


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