所以,三个小部分:
1)MaxMind地理IP查找,通过IP地址获取国家/地区代码:
var onSuccess = function(x){
var ip = x.traits.ip_address;
document.getElementById('ip_address').value = ip;
var country_code = x.country.iso_code;
document.getElementById('ip_country_code').value = country_code;
…
};
2)包含税率百分比的国家/地区引用数组:
// Array of values for tax rates
var tax_rates= new Array();
tax_rates["noteu"]=0.0;
tax_rates["ES"]=21.0;
tax_rates["AU"]=20.5;
tax_rates["BE"]=21.7;
…
3)TaxPrice函数,它使用其中一个小数来计算税额,然后在订阅表单中计算应付总额。请注意XXXXX:
function TaxPrice()
{
var taxprice=0;
XXXXX
return taxprice;
}
1中的document.getElementById
位显然可以更新隐藏字段或其他一些HTML元素。
如果用户必须选择手动下拉菜单,我知道如何使用XXXXX。
但是如何根据IP地址国家代码从数组和TaxPrice函数中获取税号? (即在javascript中,不更新HTML元素)。
祝大家新年快乐。更新:为了清楚起见,我不需要知道如何将其变为下拉列表,我已经可以做到这一点,在这个用例中,不应该允许用户选择他自己的税收国家,它应该根据IP地址自动设置。因此,非代码措辞将类似于:
taxprice EQUALS tax_rate.value ACCORDING TO ip_address_code
答案 0 :(得分:0)
你在寻找像元素属性这样的东西吗? Mydiv.tax = taxvalue; Elements的属性是在不同功能之间进行通信的优雅方式。 您可以为任何元素分配任何值。 只要Basic元素存在,您就可以从JavaScript中的任何函数中检索值。
答案 1 :(得分:0)
你可以做的一种方法是在你的成功回调中设置一个全局selectedCountryCode
变量,并在你的TaxPrice数组中引用tax_rates[selectedCountryCode]
(它应该是一个对象,如nnnnnn指出的那样)
(function () {
var selectedCountryCode = "";
var onSuccess = function(x) {
var ip = x.traits.ip_address;
document.getElementById('ip_address').value = ip;
selectedCountryCode = x.country.iso_code; // <-- Set selectedCountryCode for later use
document.getElementById('ip_country_code').value = selectedCountryCode; // <-- Set dropdown value
};
document.getElementById("ip_country_code").addEventListener("change", function() {
selectedCountryCode = this.value;
console.log(TaxPrice());
});
// Object of values for tax rates
var tax_rates = {};
tax_rates["noteu"] = 0.0;
tax_rates["ES"] = 21.0;
tax_rates["AU"] = 20.5;
tax_rates["BE"] = 21.7;
function TaxPrice() {
var taxprice = 0;
taxprice = tax_rates[selectedCountryCode];
return taxprice;
}
})();
Change Me: <select id="ip_country_code">
<option value="noteu">noteu</option>
<option value="ES">ES</option>
<option value="AU">AU</option>
<option value="BE">BE</option>
</select>
答案 2 :(得分:0)
所以,谢谢你的建议。不确定我是否理解这是如何工作的,但经过一些探讨后,它现在是。与原始问题中的代码相比,我不得不:
1)在顶部添加一个全局变量,高于其他所有变量,与IP查找代码无关(即IP country_tax
变量中现在没有对onSuccess
的引用):
var country_tax;
2)将TaxPrice功能中的XXXXX替换为:
var country_tax = document.getElementById("ip_country_code").value;
var taxprice = taxes_from_database[country_tax];
因此完整的TaxPrice函数最终为:
function TaxPrice()
{
var taxprice = 0;
var country_tax = document.getElementById("ip_country_code").value;
var taxprice = tax_rates[country_tax];
return taxprice;
}
似乎不需要嵌套函数或闭包或任何非常复杂的东西。如果将tax_rates设置为数组或对象,则无关紧要(代码),结果是相同的,尽管我想理解为什么在这种情况下推荐数组上的对象。
并且给定的TaxPrice从表单字段中获取值而不是从IP onSuccess函数中获取 - 我不知道为什么我需要顶部的全局变量声明,如果有人想要解释那个...