HTML 表单 - 值取决于两个不同的下拉菜单

HTML form - value depends on two different drop-down menus

本文关键字:两个 下拉菜单 表单 取决于 HTML      更新时间:2023-09-26

你好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()"     

我假设国家/地区下拉列表默认为美国。如果是这种情况,只需将"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
        }
    }
你自

称是业余爱好者。我认为您可能可以更轻松地使用多维数组解决问题,以便您可以将会员价格与相应的邮资相关联:

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

如果我理解你想做什么,看起来你走在正确的轨道上,但需要颠倒你如何思考与变量相关的逻辑。你还有一些额外的"{}

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

试试这个:

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;

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

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/

附言我认为从技术上讲,您不是在创建数组,而是在创建对象,所以我声明variable_name = {}