2013-02-09 34 views
0

亲爱的朋友计算器单选框动态总一个javascript,创建创建依赖于HTML表单检查

我创建一个在线的HTML表单,并创建了一个JavaScript函数来动态地(不完全确定我使用这个词是正确的)在选择选项时在表格底部显示应付会费总额。总费用取决于会员类型,国家和付款方式。当我计算的所有信息都是按照国家的会员类型和邮费时(我使用这两种选项的下拉式表单),它完美运行。现在我想在方程中添加第三项(付款方式 - 一种可选择支票或PayPal),但我无法实现。我这次使用单选按钮。

我的共计功能是这样的(不带“+ 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新手,单选按钮似乎是我的克星(我想学习如何使用它们,而不是用下拉菜单或我知道如何去做的事情来替换它们)。

谢谢!

+0

你能展示一个[最小的,代表性的](http://sscce.org/),[现场演示](http://jsfiddle.net/),我们可以用它来看你的问题吗? – 2013-02-09 22:34:30

+0

我希望这是成功的:http://jsfiddle.net/Deeee/ccFL6/3/ – Deeee 2013-02-10 19:15:10

+0

http://jsfiddle.net/Deeee/ccFL6/ – Deeee 2013-02-10 19:39:53

回答

1

不应该使用数组来创建项目之间的映射。什么你要找的是一个对象:

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

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

paypalFee = paymentmethod_Fee[selectedPaymentmethod.value]; 

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

+0

这很有趣,因为我使用数组来创建成员价格的映射和它的工作... – Deeee 2013-02-10 18:35:40

0

不要使用多个元素与id相同。这样做会造成毛刺。OVER 9000毛刺。所以,不要使用重复的id s。不要。这是网站开发的一个准则。它会为你服务。按照它的信。或者,您将有毛刺。我相信你不想毛刺。摆脱故障。请勿使用重复的id s。

前段TL;博士:总是有独特的id S,或者你得到毛刺

你应该ID payment_methods包裹在divradio按钮。然后,使用document.getElementById("payment_methods").childNodes[i]来访问每个连续的按钮。

(顺便说一下,用相同的name 2个radio按钮是互斥的,所以按钮应具有相同的name秒,但不同id秒)

您正确使用checked。这只是你如何访问导致毛刺的元素。

希望这可以摆脱你的故障。

+0

啊!这很有意义。我已经按照建议将它包裹在一个div中了....我仍然明显错过了一些东西......我保持单选按钮的ID相同,但是一次只能检查一个。 http://jsfiddle.net/Deeee/ccFL6/11/ – Deeee 2013-02-10 19:38:29

+0

http://jsfiddle.net/Deeee/ccFL6/ – Deeee 2013-02-10 19:39:28

+0

这是通过'name'完成的。 'id'总是唯一的,因为它指的是一个特定的元素。 'name'指的是表单字段,因此在同一组的'radio'按钮之间重复。 – MathSquared 2013-02-10 23:07:34