你好javascript专家!
我在这里是一个新手,试图创建一个脚本来在网站上添加会员费(我是一名志愿者)。非常感谢任何帮助。
我使用此网站:http://www.javascript-coder.com/javascript-form/javascript-calculator-script.phtml来设置我的HTML。
它运作得很好(我设置了3个功能,一个用于计算会员价,另一个用于邮资,另一个用于到期总金额 - 我没有将它们包含在下面但是知道它们工作正常)。
直到我意识到邮资的价值(我只使用第一个下拉菜单计算:id =国家)也取决于第二个下拉菜单中的金额(第二个下拉菜单的ID: membership_type)。也就是说,邮资不仅取决于国家,还取决于会员类型。我尝试设置一个脚本,根据成员资格类型的值改变邮资的价值,但它不起作用。
我不是一个编码器,因为你可以告诉我所以我花了很多时间寻找正确的方法来做到这一点,但已经来到了一个deadend ....
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()"
答案 0 :(得分: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
答案 1 :(得分:0)
如果我理解你正在尝试做什么,看起来你是在正确的轨道上,但需要反思你如何考虑与变量相关的逻辑。您还有一些额外的"
和{}
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;
答案 2 :(得分: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;
答案 3 :(得分: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/
P.S。我认为从技术上讲,你不是创建数组,而是创建对象,所以我声明variable_name = {}
答案 4 :(得分: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
}
}