0

こんにちはjavascriptの専門家!

私はここの初心者で、ウェブサイトで会費を合計するためのスクリプトを作成しようとしています(私はボランティアです)。どんな助けでも大歓迎です。

私はこのウェブサイトを使用しました:http : //www.javascript-coder.com/javascript-form/javascript-calculator-script.phtml私のhtmlを設定しました。

それはうまく機能しました(私は3つの関数を設定しました。1つは会費を計算し、もう1つは郵便料金を計算し、もう1つは未払いの合計金額です。以下にそれらを含めていませんが、正常に機能することを知っています)。

郵便料金の値(最初のドロップダウンメニューのみを使用して計算したid = country)も、2番目のドロップダウンメニュー(2番目のドロップダウンメニューのid:membership_type)の金額に依存していることに気付くまで。つまり、郵便料金は国だけでなく、会員の種類によっても決まります。メンバーシップタイプの値に応じて郵便料金の値を変更するスクリプトを設定しようとしましたが、機能しません。

あなたが言うことができるように私はコーダーではないので、私はこれを行う正しい方法を探すのに多くの時間を費やしましたが、行き詰まりになりました...。


    var membership_prices = new Array();
    membership_prices["regular"]=40;
    membership_prices["student"]=24;
    membership_prices["emeritus"]=24;
    membership_prices["regularplus"]=62;
    membership_prices["studentplus"]=46;
    membership_prices["emeritusplus"]=46;

    var extra_postage_cost = new Array();
    extra_postage_cost["USA"]=0;
    extra_postage_cost["Canada"]=0;

    <!-- this is the part that needs work: Edited since original post -->
       extra_postage_cost["Other_Country"]
   if (document.getElementById('membership_type').value =="regular")
       extra_postage_cost["Other_Country"]=8;
   else if (document.getElementById('membership_type').value =="student")
       extra_postage_cost["Other_Country"]=8;
   else if (document.getElementById('membership_type').value =="emeritus")
       extra_postage_cost["Other_Country"]=8; 
   else if (document.getElementById('membership_type').value =="regularplus")
       extra_postage_cost["Other_Country"]=16;
   else if (document.getElementById('membership_type').value =="studentplus")
       extra_postage_cost["Other_Country"]=16;
   else if (document.getElementById('membership_type').value =="emeritusplus")
       extra_postage_cost["Other_Country"]=16;
   else 
       extra_postage_cost["Other_Country"]=0;
   <!-- end of what I believe needs work -->

残りのコードは次のとおりです。

    function getMembershipPrice ()
        {
        var membershipPrice=0;
        var theForm = document.forms["membershipform"];
        var selectedMembership = theForm.elements["membership_type"];
        membershipPrice = membership_prices[selectedMembership.value];
        return membershipPrice;
        }

    function getExtraPostagePrice ()
        {
        var extraPostagePrice = 0;
        var theForm = document.forms["membershipform"];
        var selectedPostage = theForm.elements["country"];
        extraPostagePrice = extra_postage_cost[selectedPostage.value];
        return extraPostagePrice;
        }

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

ドロップダウンメニュー自体には、各ドロップダウンメニューの角かっこ内にこの種のコードがあります。

   select name="membership_type" id="membership_type" onchange="getAmountDue()"
   select name="country" id="country" onchange="getAmountDue()"     
4

5 に答える 5

0

自称素人でよくやった。おそらく、多次元配列を使用して問題をより簡単に解決できるので、メンバーシップの価格を対応する送料に関連付けることができると思います。

var MEMBERSHIP = 0;
var POSTAGE = 1;

var membership_prices = new Array();
membership_prices["regular"] = [40, 8];
membership_prices["student"] = [24, 8];
membership_prices["emeritus"] = [24, 8];
membership_prices["regularplus"] = [62, 16];
membership_prices["studentplus"] = [46, 16];
membership_prices["emeritusplus"] = [46, 16];

ここで、会員価格と送料にアクセスするには、他の国が選択されている場合は、次のコマンドを実行するだけです:

membership_prices["regular"][MEMBERSHIP]   // returns 40
membership_prices["regular"][POSTAGE]      // returns 8

0 と 1 の代わりに MEMBERSHIP と POSTAGE を使用したので、メンバーシップと投稿の値を取得するときにコードが読みやすくなります。または、必要に応じて、0 と 1 を使用して内側の配列にアクセスすることもできます。

membership_prices["regular"][0]   // returns 40
membership_prices["regular"][1]      // returns 8
于 2012-05-20T00:46:59.597 に答える
0

あなたがやろうとしていることを理解していれば、正しい方向に進んでいるように見えますが、変数に関連するロジックについての考え方を逆転させる必要がありました。また、いくつか"の余分な とがありました{}

以下のコードの代わりにこれを試してください<!-- this is the part that needs work: -->

if (document.getElementById('membership_type').value =="regular")
    extra_postage_cost["Other_Country"]= 8;
else if (document.getElementById('membership_type').value =="student")
    extra_postage_cost["Other_Country"]= 8;
else if (document.getElementById('membership_type').value =="emeritus")
    extra_postage_cost["Other_Country"]= 8; 
else if (document.getElementById('membership_type').value =="regularplus")
    extra_postage_cost["Other_Country"]= 16;
else if (document.getElementById('membership_type').value =="studentplus")
    extra_postage_cost["Other_Country"]= 16;
else if (document.getElementById('membership_type').value =="emeritusplus")
    extra_postage_cost["Other_Country"]= 16;
else 
    extra_postage_cost["Other_Country"]= 0;
于 2012-05-20T00:48:46.250 に答える
0

私も初心者です :) 私はしばらくの間、他の国の追加送料を追加する最も読みやすい方法を考えました。

extra_postage_cost["Country"] = [ (regular), (student), (emeritus) ]

括弧内の各値は数値です。例えば:

extra_postage_cost["Ostia"] = [10, 20, 30, 60, 60, 30];

これが機能するには、いくつかの変数と関数を定義する必要があります。アイデアは、タイプ (学生、通常) の番号順を、membership_types各追加送料コスト配列の数値位置にリンクすることです。

  membership_types = ["regular", "student", "emeritus", 
    "regularplus", "studentplus", "emeritusplus"];

  function membership_index(m_type) {
    var index = -1;
    for(var i = 0; i < membership_types.length; i++) {
      if(m_type == membership_types[i]) {
        index = i;
      }
    }
    return index;
  }

次に、取得するとき、それはちょっと醜いです:(しかし、最初に国に対処し、次にメンバーシップタイプに一致するコストの数値位置に対処したい.

extraPostage = extra_postage_cost[whichCountry][membership_index(whichMembership)];

結果はこちら: http://jsfiddle.net/TgdEW/

ps技術的には、配列ではなくオブジェクトを作成していると思うので、宣言しますvariable_name = {}

于 2012-05-20T01:21:56.797 に答える
0

これを試して:

var otherCountryPostageCost = 0,
    membershipType = document.getElementById('membership_type');

if (membershipType == "regular" || membershipType == "student" || membershipType == "emeritus"){
  otherCountryPostageCost = 8;
} else if (membershipType == "regularplus" || membershipType == "emeritusplus") {
  otherCountryPostageCost = 16;
}

extra_postage_cost["Other_Country"] = otherCountryPostageCost;
于 2012-05-20T01:01:24.597 に答える
0

国ドロップダウンはデフォルトで米国に設定されていると思います。この場合は、関数を呼び出して追加料金を更新する「onchange」イベント リスナーをドロップダウンに追加するだけです。

したがって、追加の送料の配列オブジェクトを使用する代わりに、変数 extraPostage を最初にゼロに設定し、ドロップダウンが変更されたときに更新するだけです。

    var extraPostage = 0;

    function onSelectChange(){
      var countrySelect = document.getElementById('countrySelect'); 
      var typeSelect = document.getElementById('membership_type');
      if(countrySelect.value != "Other Country"){
        extraPostage = 0;
        return;
      }
      else{
        var type = typeSelect.value;
        switch(type){
          case "regular":
            extraPostage = 8;
            break;
          case "student":
            extraPostage = 8;
            break;
          case "emeritus":
            extragPostage = 8;
            break;
          //keep going for each different possibility
        }

    }
于 2012-05-20T01:35:18.117 に答える