0

你好javascript专家!

我是这里的新手,正在尝试创建一个脚本来在网站上添加会员费(我是一名志愿者)。任何帮助是极大的赞赏。

我使用这个网站:http ://www.javascript-coder.com/javascript-form/javascript-calculator-script.phtml来设置我的html。

它工作得很好(我设置了 3 个函数,一个用于计算会员价格,另一个用于计算邮资,另一个用于计算应付总额 - 我没有将它们包括在下面,但知道它们工作正常)。

直到我意识到邮资的价值(我仅使用第一个下拉菜单:id=country 计算)也取决于第二个下拉菜单中的金额(第二个下拉菜单的 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

我使用了 MEMBERSHIP 和 POSTAGE 而不是 0 和 1,因此当您获取会员和发布的值时,它可能会使您的代码更具可读性。或者,如果您愿意,您可以简单地使用 0 和 1 访问内部数组:

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

如果我理解您正在尝试做的事情,那么您看起来是在正确的轨道上,但需要颠倒您对与变量相关的逻辑的思考方式。你还有一些额外"的 s 和{}s。

试试这个代替下面的代码<!-- 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

试试这个:

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

我也是新手 :) 一段时间以来,我认为添加其他国家/地区的额外邮资最易读的方法,假设会有很多,并得出以下结论:

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

我假设国家下拉菜单默认为美国。如果是这种情况,只需将“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 回答