【问题标题】:JavaScript function will only work onceJavaScript 函数只能工作一次
【发布时间】:2013-05-30 10:41:33
【问题描述】:

我有一个 onchange 触发的 JavaScript 函数。它的作用是从输入字段中获取值,然后将其添加到在另一个字段中输入的值中,然后在不同的字段中显示答案。

第一次工作正常,但是当我输入一个新值并离开该字段时出现错误:TotalPurchasePrice is not a function

function TotalPurchasePrice(BuyinPrice, TopupAmount) {
var BuyinPrice
var TopupAmount
BuyinPrice = BuyinPrice.toString().replace(/\£|\,/g, '');
TopupAmount = TopupAmount.toString().replace(/\£|\,/g, '');

TotalPurchasePrice = (BuyinPrice * 1) + (TopupAmount * 1);

document.getElementById('tTotalPurchasePrice').value = TotalPurchasePrice;
}

谁能告诉我为什么这只能工作一次?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这一行:

    TotalPurchasePrice = (BuyinPrice * 1) + (TopupAmount * 1);
    

    TotalPurchasePrice 函数替换为一个数字。那么它不是一个函数,因此你有错误。

    使用不同的变量名:

    var totalPrice = (BuyinPrice * 1) + (TopupAmount * 1);
    document.getElementById('tTotalPurchasePrice').value = totalPrice;
    

    您也可以简单地添加 var 关键字,但这会使代码混乱。

    降低此类错误概率的一种方法是在命名函数和变量时遵循最佳做法。在这里,您应该将函数命名为动词来表示操作而不是值。

    【讨论】:

      【解决方案2】:

      您在这里将 JavaScript 与 VBScript 混淆了。

      返回值使用return关键字:

      return (BuyinPrice * 1) + (TopupAmount * 1);
      

      那么函数外有这样一行:

      document.getElementById('tTotalPurchasePrice').value = TotalPurchasePrice(BuyinPrice, TopupAmount);
      

      【讨论】:

        【解决方案3】:

        在函数内分配变量的值而不用 var 说明它(在您的情况下为TotalPurchasePrice)意味着该变量是全局的。

        由于您可以将函数声明写为:var TotalPurchasePrice = function(BuyinPrice, TopupAmount) {},因此您只是在覆盖它。

        您可以重命名函数内的变量,也可以在其前面添加一个 var 语句,例如:

        var TotalPurchasePrice = (BuyinPrice * 1) + (TopupAmount * 1);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-27
          • 1970-01-01
          • 2023-02-04
          • 1970-01-01
          • 2017-09-10
          • 1970-01-01
          • 2011-04-13
          • 1970-01-01
          相关资源
          最近更新 更多