将旧的javascript代码修改为新的

时间:2014-02-10 13:23:56

标签: javascript jquery

旧的HTML和javascript代码:

<tr>
 <input id="pret_id_1" type="text" name="pret" />
 <input id="val_id_1" type="text" name="val"/>
 <input id="val_tva_id_1" type="text" name="val_tva"/>
 <input id="cant_id_1" type="text" name="cant" />
</tr>

<script>
  var x=document.form_factura;
  x.val.value = (x.pret.value * x.cant.value).toFixed(2) ;
  x.val_tva.value = ((x.pret.value * x.cant.value) * tva_val).toFixed(2);       

  if(!/^[a-z()+ A-Z()-]*$/.test(x.val_tva.value)){        
    var suma = (x.pret.value * x.cant.value)- (-x.val_tva.value);
  } else { 
    var suma = (x.pret.value * x.cant.value);
  }       
  x.suma.value = suma.toFixed(2);
  ...
</script>

我尝试将这个加倍..我在名称元素中添加了数组。

<tr class="row1">
 <input id="pret_id_1" type="text" name="pret[]" />
 <input id="val_id_1" type="text" name="val[]"/>
 <input id="val_tva_id_1" type="text" name="val_tva[]"/>
 <input id="cant_id_1" type="text" name="cant[]" />
</tr>
<tr class="row2">
 <input id="pret_id_2" type="text" name="pret[]" />
 <input id="val_id_2" type="text" name="val[]"/>
 <input id="val_tva_id_2" type="text" name="val_tva[]"/>
 <input id="cant_id_1" type="text" name="cant[]" />
</tr>

如何更新数组输入名称元素的javascript代码?

  

如果它只有一行(.row1),则javascript无效..必须至少有2个具有相同名称的元素。

编辑:我忘了提到我使用php和mysql来存储数据。

感谢。

2 个答案:

答案 0 :(得分:1)

首先,您不应在字段名称中添加[]

<tr class="row1">
 <input id="pret_id_1" type="text" name="pret" />
 <input id="val_id_1" type="text" name="val"/>
 <input id="val_tva_id_1" type="text" name="val_tva"/>
 <input id="cant_id_1" type="text" name="cant" />
</tr>
<tr class="row2">
 <input id="pret_id_2" type="text" name="pret" />
 <input id="val_id_2" type="text" name="val"/>
 <input id="val_tva_id_2" type="text" name="val_tva"/>
 <input id="cant_id_1" type="text" name="cant" />
</tr>

然后x.val将返回一个DOM元素数组(而不是像之前一样的单个元素):

<script>
  var x=document.form_factura;
  for(var i=0; i<x.pret.length; i++) {
    x.val[i].value = (x.pret[i].value * x.cant[i].value).toFixed(2) ;
    x.val_tva[i].value = ((x.pret[i].value * x.cant[i].value) * tva_val).toFixed(2);       

    if(!/^[a-z()+ A-Z()-]*$/.test(x.val_tva.value)){        
      var suma = (x.pret[i].value * x.cant[i].value)- (-x.val_tva[i].value);
    } else { 
      var suma = (x.pret[i].value * x.cant[i].value);
    }       
    x.suma[i].value = suma.toFixed(2);
    ...
  }
</script>

答案 1 :(得分:0)

你有独特的ID,所以你可以循环

for(var i=1;i<=2;i++) {
    var pret = document.getElementById("pret_id_" + i );
    var cant = document.getElementById("cant_id_" + i );
    var val = document.getElementById("val_id_" + i ); 
    val.value = (pret.value * cant.value).toFixed(2) ;
}

如果你想通过名字来做,

var pretElems = document.form_factura["pret[]"];
var cantElems = document.form_factura["cant[]"];
var valElems = document.form_factura["val[]"]]; 


for(var i=1;i<=2;i++) {
    var pret = pretElems[i];
    var cant = cantElems[i];
    var val = valElems[i]; 
    val.value = (pret.value * cant.value).toFixed(2) ;
}