0

親愛なるスタックオーバーフローの友人へ

私はオンライン HTML フォームを作成しており、オプションが選択されたときにフォームの下部に会費の合計額を動的に表示するための JavaScript 関数を作成しました (この単語を正しく使用しているかどうかは完全にはわかりません)。合計料金は、メンバーシップの種類、国、および支払い方法によって異なります。私が計算していたのはメンバーシップの種類と国別の送料だけだったとき、それは完璧に機能しました (これら 2 つのオプションにはドロップダウン フォームを使用しました)。ここで、式に 3 番目の項 (支払い方法 - 小切手またはペイパルを選択できます) を追加したいと思いますが、うまくいきません。今回はラジオボタンを使用しています。

私の合計関数はこれです(「+ getPaypalfee()」がなくても問題なく動作します):

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

Paypal の料金を返すために私が書いた 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 以上の不具合。したがって、重複した s を使用しないでくださいid。ただしないでください。これは Web 開発の格言です。それはあなたによく役立ちます。手紙に従ってください。または、グリッチが発生します。私はあなたがグリッチを望んでいないと確信しています。グリッチを取り除きます。重複する を使用しないでくださいid

(前の段落 tl;dr:常に一意idの を使用しないと、グリッチが発生します。 )

radioボタンをdivwith idでラップする必要がありますpayment_methods。次に、 を使用document.getElementById("payment_methods").childNodes[i]して、連続する各ボタンにアクセスします。

(ちなみに、radio同じ 2 つのボタンnameは相互に排他的であるため、ボタンnameの は同じで異なるにする必要がありますid。)

あなたはchecked正しく使用しています。不具合の原因となっている要素にアクセスする方法です。

これで不具合が解消されることを願っています。

于 2013-02-09T23:44:31.823 に答える