我已经搜索过,我可以看到还有其他类似的问题,但我不明白如何实现它。
这是我的第一个功能:
function pricecalc() {
var a = document.getElementById("field_0");
var quantity = a.value.substring(0, 1);
var b = document.getElementById("field_1");
var type = b.value;
if (quantity == '2') {
var rate = '120';
} else if (quantity == '3') {
var rate = '110';
} else {
var rate = '100';
}
var price = rate * quantity;
if (type == 'Credit card') {
var price = price * 1.034;
}
var price_each = (price / quantity);
document.getElementById("cost").innerHTML = price;
document.getElementById("costeach").innerHTML = price_each;
}
然后根据它,我有这个:
function PHPFMG( formID ){
var redirect = 'https://www.paypal.me/' + price;
}
但是我无法在第二个函数中访问price变量。我真的不想通过在第一个函数的页面上设置一些文本然后用第二个函数拉动它来避免这种情况。
我看了一下创建一个全局变量,但是如果我在我的top函数中设置它然后在我的第二个函数中将它拉出来它似乎只有它的原始值。
答案 0 :(得分:1)
您在函数内声明了价格,而不是全局。
它在priceCalc函数内,因此在那里本地,不能在它之外引用。因此,使用
在函数外部声明全局价格valvar price; //outside of function
function priceCalc(){}
另外,为什么要两次申报价格?
var price = rate * quantity; //declared here
if (type == 'Credit card') {
var price = price * 1.034; //and here
}
答案 1 :(得分:1)
您需要从任何函数中初始化价格变量
TaggableType
答案 2 :(得分:0)
您可以通过调用第一个函数来获得第一个函数return price;
并替换第二个函数中的price
来解决问题:
function pricecalc() {
var quantity = Number(field_0.value.charAt(0));
var type = field_1.value;
var rate, price, price_each;
if (quantity === 2) {
rate = 120;
} else if (quantity === 3) {
rate = 110;
} else {
rate = 100;
}
price = rate * quantity;
if (type === 'Credit card') {
price *= 1.034;
}
price_each = (price / quantity);
cost.innerHTML = price;
costeach.innerHTML = price_each;
return price;
}
function PHPFMG( formID ){
var redirect = 'https://www.paypal.me/' + pricecalc();
}
这样您就不必引入全局变量price
。
答案 3 :(得分:0)
var price = 0;
function pricecalc() {
var a = document.getElementById("field_0");
var quantity = a.value.substring(0, 1);
var b = document.getElementById("field_1");
var type = b.value;
if (quantity == '2') {
var rate = '120';
} else if (quantity == '3') {
var rate = '110';
} else {
var rate = '100';
}
price = rate * quantity;
if (type == 'Credit card') {
var price = price * 1.034;
}
var price_each = (price / quantity);
document.getElementById("cost").innerHTML = price;
document.getElementById("costeach").innerHTML = price_each;
}

function PHPFMG( formID ){
var redirect = 'https://www.paypal.me/' + pricecalc();
}

答案 4 :(得分:0)
由于范围的原因,您无法访问第二个函数中的变量,您总是可以在函数体内创建一个函数,该函数可以访问该变量,或者在该函数体内使用匿名函数有权访问或传递第二个函数作为参数,并在包含价格变量声明的函数内执行它,该声明称为回调。另一种选择是在函数体外声明变量,但请记住,这是全局范围,可能会产生问题并被认为是不好的做法,尤其是在使用库时。这是一个关于javaScript变量范围的链接,MDN是一个很好的参考,将它添加到你的书签https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var 这是一篇关于回调的文章http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ 将该函数作为回调函数传递
`function priceCalc( formID, callback) {
//your code goes here
callback( formId); // the callback function is now executed and has access
// to the variables inside priceCalc
} // end function
// execute priceCalc
priceCalc( formID, PHPFMG );`