2014-10-21 176 views
0

我有一个自动呈现的HTML表单,它使用输入字段的索引。用于更改名称的Javascript getElementsByName()

求量:

<input id="id_orderline_set-0-orderline_quantity" name="orderline_set-0-orderline_quantity" onkeyup="orderlineTotal()" type="number" value="120"> 

产品价格;

<input id="id_orderline_set-0-orderline_product_price" name="orderline_set-0-orderline_product_price" onkeyup="orderlineTotal()" type="number" value="22"> 

总线价格;

<input id="id_orderline_set-0-orderline_total_price" name="orderline_set-0-orderline_total_price" tag="orderline_total_price" type="number" value="2640"> 

对于以下几行,id和name的索引增加,只显示数量示例;

<input id="id_orderline_set-1-orderline_quantity" name="orderline_set-1-orderline_quantity" onkeyup="orderlineTotal()" type="number" value="55"> 

我想用下面的JavaScript来计算总的线路价格;

function orderlineTotal() 
{ 
    var orderlineTotalPrice = 0; 
    var theForm = document.forms["orderform"]; 

    var orderlineQuantityField = theForm.getElementsByName["orderline_quantity"]; 
    var orderlineProductPriceField = theForm.getElementsByName["orderline_product_price"]; 
    var orderlineTotalPriceField = theForm.getElementsByName["orderline_total_price"]; 

    for (var i = 0; i < orderlineQuantityField.length; i ++) { 
     orderlineTotalPrice = orderlineQuantityField[i].value * orderlineProductPriceField[i].value; 
     orderlineTotalPriceField[i].value = orderlineTotalPrice; 
    } 
} 

Offcourse这不会工作,因为元素的名称不匹配。我可以通过使用部分名称来查找元素的名称吗?如果不是,我应该如何循环输入框来计算线路总数?

+0

为要加总的元素添加一个公共类名,然后使用'getElementsByClassName()'。您可以在任何给定的对象上拥有许多不同的类名,以便像这样总是可以将一个类名添加到一组对象中。 – jfriend00 2014-10-22 00:43:04

回答

1

您标记jQuery的,所以如果你想使用jQuery你可以使用结束与选择:

$("input[name$='orderline_quantity']") 

ends with

这里还有

starts with

$("input[name^='id_orderline_set-0']") 

contains

$("input[name*='orderline_']") 
0

也许你可以使用静态名称。设置相同类型的输入相等的输入名称,然后使用此功能:

var elements = document.getElementsByName('name'); 
for (var i=0; i<elements.length; i++) { 
    doSomething(elements[i]); 
} 

其中名称相匹配输入的名称。

相反的:

name="orderline_set-0-orderline_total_price" 

使用:

name="orderline_total_price" 

然后:

var orderlineTotalPriceField = theForm.getElementsByName["orderline_total_price"]; 

等等...