JavaScript在不同函数中将数字变量一起添加

时间:2014-01-05 02:17:58

标签: javascript html forms

在JavaScript中,我想添加两个数字变量:film_costdelivery_cost,并将它们显示在警告框中。这些变量属于两个不同的函数。

function getcost()
{
    var cost = document.getElementsByName("format");
    var len = cost.length

    for (i=0;i<len;i++)
    {
        if(cost[i].checked)
        {
            document.getElementById("data2").innerHTML = '£'+cost[i].value;
            var film_cost = cost[i].value;
        }
    }
}

function add_delivery()
{
    var delivery_cost = document.getElementsByName("delivery");
    var len = delivery_cost.length

    for (i=0;i<len;i++)
    {
        if(delivery_cost[i].checked)
        {
            var dvd_delivery = delivery_cost[i].value;
            var total = dvd_delivery+film_cost;
            alert(total);   
        }
    }
}

HTML:

Delivery
<input type="radio" name="delivery"  
  onClick="add_delivery();" value="3.20">First Class<br/>
<input type="radio" name="delivery"  
  onClick="add_delivery();" value="4.20">Express Delivery<br/>

电影类型:

<input type="radio" name="format" value="20" 
  onClick="getcost();">Blu-ray + UV Copy<br/>
<input type="radio" name="format" value="14.50"
  onClick="getcost();">DVD + UV Copy<br/>
<input type="radio" name="format" value="30" 
  onClick="getcost();">Limited Edition DVD + UV Copy<br/>
<input type="radio" name="format" value="13" 
  onClick="getcost();">Download<br/>

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您需要访问add_delivery()函数中的film_cost变量。

我建议做这样的事情:

function getcost()
{
    var cost = document.getElementsByName("format");
    var len = cost.length;
    var film_cost = 0;

    for (i=0;i<len;i++)
    {
        if(cost[i].checked)
        {
            document.getElementById("data2").innerHTML = '£'+cost[i].value;
            film_cost = parseFloat(cost[i].value);
        }
    }
    return film_cost;
}

function add_delivery()
{
    var delivery_cost = document.getElementsByName("delivery");
    var len = delivery_cost.length;

    for (i=0;i<len;i++)
    {
        if(delivery_cost[i].checked)
        {
            var dvd_delivery = parseFloat(delivery_cost[i].value);
            var total = dvd_delivery + getcost();
            alert(total);   
        }
    }
}

在此解决方案中,变量film_cost将默认为0,但如果选中一个框,则会更改。 add_delivery()调用getcost(),因此变量dvd_deliveryfilm_cost将一起添加到变量total中。

如果我们能看到html会很有帮助,但我认为这会对你有帮助。

最后一个建议是规范你的功能命名方式。如果你命名它们,它会帮助你(和其他人)阅读你的代码:

  • getCost()addDelivery()

  • get_cost()add_delivery()

编辑:添加了parseFloat()以将film_costdvd_delivery转换为浮点广告,以便他们可以在警报中一起添加。

答案 1 :(得分:0)

film_cost 未在第二个函数中定义。

答案 2 :(得分:0)

变量film_cost的范围仅在第一个函数内;因此,当调用第二个函数时,film_cost已经“死了”。

更简单的问题解决方法就是:

var film_cost;

function getcost()
{
var cost = document.getElementsByName("format");
var len = cost.length

for (i=0;i<len;i++)
{
    if(cost[i].checked)
    {
        document.getElementById("data2").innerHTML = '£'+cost[i].value;
        film_cost = cost[i].value;
    }
}
}

function add_delivery()
{
var delivery_cost = document.getElementsByName("delivery");
var len = delivery_cost.length

for (i=0;i<len;i++)
{
    if(delivery_cost[i].checked)
    {
        var dvd_delivery = delivery_cost[i].value;
        var total = dvd_delivery+film_cost;
        alert(total);   
    }
}
}

我只更改了第一行和if(cost [i] .checked)正文。

希望它能像你希望的那样工作!