HTML 表单 - 值取决于两个不同的下拉菜单
HTML form - value depends on two different drop-down menus
你好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 = {}
- 动态填充两个下拉菜单
- 根据两个下拉列表的默认值禁用按钮
- 根据前两个下拉ID显示第三个下拉列表
- 如何基于两个下拉选择从数据库中检索数据
- 如果选项被禁用,则多个下拉菜单会导致FIREFOX出现问题
- 使用两个下拉列表的值填充文本框
- 需要在 html 中使用两个下拉列表来显示不同的 json 值
- 第二个下拉菜单元素上的重复下拉Javascript效果
- 根据两个下拉菜单的选择设置隐藏值
- 如何基于两个下拉菜单选择进行页面重定向
- 在任一下拉列表中选择“其他”时,两个下拉菜单将打开一个文本框
- 我无法在我的网站上添加两个下拉菜单,而不会其中一个干扰另一个
- 两个下拉菜单 Ajax 在 primeface 中刷新
- 根据两个下拉菜单中的值填充并显示html表格
- 获取两个下拉菜单以在同一iframe中显示数据
- jQuery重定向基于两个下拉菜单
- Javascript影响两个下拉菜单
- 如何使用相同的.dropit css文件创建具有不同属性的两个下拉菜单?
- 从两个下拉菜单中删除选项
- 在同一导航栏中有两个下拉菜单