-
Через DOM добавляю элементы, присваиваю новые имена, эксплорер не хочет находить по этим именам новые элементы, в Опере тот же код обрабатывается как задумывалось... [Only registered and activated users can see links. Click Here To Register...]
Не работает функция calc()
:suicide2:
вот код:
Код:
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<style>
.flatList {border: 0; font-family: "Courier New", Courier, monospace; font-weight: bold; background-color:#FFD900; padding:0; margin:0; text-align:center}
</style>
<script>
*function test(){
* *var tbl = document.getElementById('orderList');
* *var tbody=tbl.getElementsByTagName('TBODY')[0];
* *var totalRows = tbody.getElementsByTagName('TR').length;
* *var tr=tbody.getElementsByTagName('TR')[0]
* *var x=tr.cloneNode(true);
* *var inps = x.getElementsByTagName('INPUT');
* *for (var i =0; *i < inps.length; i++) {
* * *inps[i].className='new';
* * *inps[i].disabled=false;
* if (inps[i].value == 'Кол-во') inps[i].value='1';
* if (inps[i].value == 'Цена') inps[i].value='123';
* if (inps[i].value == 'Скидка') inps[i].value='0';
* * *inps[i].name=inps[i].name+totalRows;
* *}
* *tbody.appendChild(x);
*}
*
function calc() {
****var total = 0;
****var tbl = document.getElementById('orderList');
****var tbody=tbl.getElementsByTagName('TBODY')[0];
****var totalRows = tbody.getElementsByTagName('TR').length;
****for (var i = 1; *i < totalRows; i++) {
*summ = eval("document.all.Sale_Kolvo_"+i+".value*document.all.Sale_Sale_"+i+".value");
*eval("document.all.Sale_Total_"+i+".value=summ");
*proc = eval("1/100*(100-document.all.Sale_Discount_"+i+".value)");
*eval("document.all.Sale_Total_"+i+".value=summ*proc");
*total = total+Number(eval("document.all.Sale_Total_"+i+".value"));
****}
****document.all.total.value = total;
}
</script>
</head>
<body onClick="calc();">
<a onclick="test()">Добавляем строку</a>
<form name=order method=get action="ins.php" enctype="multipart/form-data">
*<table border=1 cellspacing=0 cellpadding=0 bordercolor=lightblue style="border: none" Id=orderList>
*<tr>
* *<td><INPUT TYPE="text" NAME="" class=flatList Value="№" size="2" Disabled></td>
*****<td><INPUT TYPE="text" NAME="Sale_Id_" class=flatList Value="арт." size="4" Disabled onclick="alert(this.name)"></td>
*****<td><INPUT TYPE="text" NAME="Sale_Title_" class=flatList Value="Наименование" size="25" Disabled onclick="alert(this.name)"></td>
*****<td><INPUT TYPE="text" NAME="Sale_Kolvo_" class=flatList Value="Кол-во" size="6" Disabled onclick="alert(this.name)"></td>
*****<td><INPUT TYPE="text" NAME="Sale_Reserv_" class=flatList Value="Резерв" size="6" Disabled onClick="alert(this.name)"></td>
*****<td><INPUT TYPE="text" NAME="Sale_Bye_" class=flatList Value="Зак." size="8" Disabled onClick="alert(this.name)"></td>
*****<td><INPUT TYPE="text" NAME="Sale_Sale_" class=flatList Value="Цена" size="8" Disabled></td>
*****<td><INPUT TYPE="text" NAME="Sale_Discount_" class=flatList Value="Скидка" size="8" Disabled></td>
*****<td><INPUT TYPE="text" NAME="Sale_Total_" class=flatList Value="Сумма" size="8" Disabled></td>
*****<td style="border: none" bgcolor="FFFFFF"><INPUT TYPE="button" Value=del Disabled style="color:red" onClick="" Class=flat></td>
*</tr>
*</table>
*<p align=right>Общая стоимость заказа <input type="text" name="total" value=0 style="border: 0; color:red; font-weight: bold; text-align:center; width: 60"> USD</p>
</form>
</body>
</html>
-
Вот так проверял
Код:
var ins = document.getElementsByTagName('INPUT');
var allins = "";
for (i = 0; i < ins.length; i++)
{
****allins += "\n" + ins[i].name + "=" + ins[i].value;
}
alert(allins);
Все элементы есть, при сабмите формы в кмандной строке все элементы появляются. А через documents.all.ИмяФирмы - никак. [Only registered and activated users can see links. Click Here To Register...]
-
Честно говоря меня это задача давно вводила в псих. Вроде элементы есть, а вроде их нет. В итоге что я могу посоветовать.
Код:
function calc() {
var total = 0;
var tbl = document.getElementById('orderList');
var tbody=tbl.getElementsByTagName('TBODY')[0];
var totalRows = tbody.getElementsByTagName('TR').length;
var rst=document.order.elements.length
var i_str=1;
var sk_i=0;
var ss_i=0;
var st_i=0;
var sd_i=0;
var system=false;
for (var i = 1; *i < rst; i++) {
var sk='Sale_Kolvo_'+i_str;
var ss='Sale_Sale_'+i_str;
var st='Sale_Total_'+i_str;
var sd='Sale_Discount_'+i_str;
var t=document.order.elements[i].name;
switch (t){
case sk:
var sk_i=i;
var sk_value=document.order.elements[i].value;
break;
case ss:
var ss_i=i;
var ss_value=document.order.elements[i].value;
break;
case st:
var st_i=i;
var st_value=document.order.elements[i].value;
break;
case sd:
var sd_i=i;
var sd_value=document.order.elements[i].value;
system=true;
i_str++;
break;
}
if (system){
var summ=sk_value*ss_value;
document.order.elements[st_i].value=summ;
var proc=1/100*(100-sd_value);
document.order.elements[st_i].value=summ*proc;
total=total+Number(document.order.elements[st_i].value);
system=false;
}
}
document.all.total.value = total;
}
Проверял и в Opera и в FF и в IE ... везде работает. Громоздко, но может быть поможет ...
-
у меня rst получется длиннее чем нужно, это тольк кусок всего кода. Но попробую из диапазона табле взять...
спасибо, попробую [Only registered and activated users can see links. Click Here To Register...]
-
Попробуй, я эту функцию в твою станицу вставил ... и все работало ...
-
В общем по номеру элемента наверно буду обращаться. Вот примерно так:
Код:
function calc() {
lnh = document.order.elements.length;
var totalAll = 0;
for (i = 0; i < lnh; i++)
{
****namEl = document.order.elements[i].name;
****if (namEl != 'Sale_Kolvo_')
****{
*numEl = namEl.substr(11,20);
*namEl = namEl.substr(0,11);
*if (namEl == 'Sale_Kolvo_')
*{
*****alert(numEl);
*****kolvo = document.order.elements[i].value;
*****sale = document.order.elements[i+3].value;
*****discount = document.order.elements[i+4].value;
*****proc=1/100*(100-discount);
*****total = kolvo*sale*proc
*****document.order.elements[i+5].value = total;
*****totalAll = totalAll + total;
*****alert(totalAll);
*}
****}
}
document.all.total.value = totalAll;
}
Так вроде покороче получается. Ну и опять же автоматом проверяется имя формы, и от нее считается.
-
Так тоже можно, а если скажем изменится положение элементов ? Но как ни странно, по номеру работает, а по имени ... фиг.
-
Замена одного символа. Опятьже считать нужно сумму в одной строке таблицы, а общий результат вводится в статичное поле [Only registered and activated users can see links. Click Here To Register...]