0

最亲爱的stackoverflow朋友,

我正在创建一个在线 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 新手,单选按钮似乎是我的克星(我想学习如何使用它们,而不是用下拉菜单或我已经知道如何做的事情来替换它们)。

谢谢!

4

2 回答 2

1

不应该使用数组来创建项目之间的映射。您正在寻找的是一个对象:

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

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

paypalFee = paymentmethod_Fee[selectedPaymentmethod.value];

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

于 2013-02-09T22:40:23.507 回答
0

不要使用多个相同的元素id。这样做会产生故障。 超过 9000 个 故障。所以,不要使用重复id的 s。只是不要。这是Web开发的格言。它会很好地为您服务。顺其自然。否则,您将遇到故障。我相信你不想要小故障。摆脱故障。不要使用重复id的 s。

前一段 tl;dr:总是有唯一id的 s,否则你会遇到故障。

你应该把你的radio按钮包装在一个div带有 id的地方payment_methods。然后,使用document.getElementById("payment_methods").childNodes[i]访问每个连续的按钮。

(顺便说一下,两个radio相同的按钮name是互斥的,所以按钮应该有相同name的s但不同id的s。)

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

希望这可以消除您的故障。

于 2013-02-09T23:44:31.823 回答