创建一个javascript,根据html表单中选中的单选框创建动态合计

Creating a javascript that creates a dynamic total depending on radio box checked in html form

本文关键字:创建 单选框 动态 表单 根据 一个 javascript html      更新时间:2023-09-26

最亲爱的堆叠者朋友,

我正在创建一个在线html表单,并创建了一个javascript函数,以便在选择选项时在表单底部动态显示(不完全确定我是否正确使用了这个词)应付的会员费总额。总费用取决于会员类型、国家和付款方式。当我只计算会员类型和根据国家/地区的邮费时,它运行得很好(我使用了这两个选项的下拉表)。现在我想把第三项添加到等式中(付款方式——可以选择支票或贝宝),但我无法让它发挥作用。这次我用的是单选按钮。

我的合计函数是这样的(如果没有"+getPaypalfee()",它工作得很好):

function getAmountDue()
    {
    var amountDue = getMembershipPrice() + getExtraPostagePrice() + getPaypalfee();
    document.getElementById('amountDue').innerHTML ="Amount Due: $"+amountDue;
    }

我写的返回贝宝费用的javascript是这样的(它变得非常复杂,我不确定我哪里出了问题,以及如何重新启动!):

var paymentmethod_Fee = new Array();
paymentmethod_Fee["cheque"]=0;
paymentmethod_Fee["paypal"]=2;
function getPaypalfee()
    {
    var paypalFee=0;
    for (var i=0; i < document.membershipform.payment_method.length; i++)
        {
        if (document.membershipform.payment_method[i].checked)
            {
             var selectedPaymentmethod = document.membershipform.payment_method[i].value;
            }
        }
    paypalFee = paymentmethod_Fee[selectedPaymentmethod.value];
    return paypalFee;
    }

单选按钮的html如下所示:

<p>I will make payment via: <BR>                                
<input type="radio" id="payment_method" name="payment_method" value="cheque" checked="yes" onchange="getAmountDue()">Cheque
<input type="radio" id="payment_method" name="payment_method" value="paypal" onchange="getAmountDue()">Paypal (Add $2)

任何对我逻辑中的缺陷的见解都将不胜感激!我是一个javascript新手,单选按钮似乎是我的克星(我想学习如何使用它们,而不是用下拉菜单或我已经知道如何使用的东西来代替它们)。

谢谢!

数组不应用于创建项之间的映射。你要找的是一个物体:

var fees = {
    cheque: 0,
    paypal: 2
};

至于你的错误,就在这里:

paypalFee = paymentmethod_Fee[selectedPaymentmethod.value];

paymentmethod_Fee已经是一个字符串。它没有value属性。

不要使用多个具有相同id的元素。这样做会产生故障超过9000个故障所以,不要使用重复的id s。只是不要。这是网络开发的格言。它对你很有用。严格遵照执行。或者,您将出现故障我确信您不希望出现故障消除故障不要使用重复的id s。

太长了,读不下去了前一段:始终具有唯一的id,否则会出现故障。

您应该将radio按钮包装在id为payment_methodsdiv中。然后,使用document.getElementById("payment_methods").childNodes[i]访问每个连续的按钮。

(顺便说一句,具有相同name的两个radio按钮是互斥的,因此按钮应该具有相同的name秒但不同的id秒。)

您正确使用checked。正是您访问元素的方式导致了故障

希望这能消除你的故障