1

我收到以下错误,但找不到原因:

TypeError:对象不是函数

这是我的html:

<td><input type="text" value="" id="cash_retained" name="cash_retained" onkeyup="net_cash()" size="25"></td>
<td><input type="text" value="" id="cash_change" name="cash_change" onkeyup="net_cash()" size="25"></td>
<td><input type="text" value="0" id="net_cash" name="net_cash"></td>

这是我的js函数:

function net_cash() {
    var cash = 0;
    var retained = document.getElementById("cash_retained");
    var change = document.getElementById("cash_change");

    cash += parseInt(retained.value);
    cash += parseInt(change.value);

    if (isNaN(cash)) {
        document.getElementById("net_cash").value = "0";
    } else {
        document.getElementById("net_cash").value = cash;
    }
}

我一生都看不到为什么这不起作用。我有其他类似的 js 函数发现它很好。

4

2 回答 2

9

这里的问题似乎是您有一个与您的函数同名的表单元素:

<td><input type="text" value="0" id="net_cash" name="net_cash"></td>

所以当你调用net_cash()你的onkeyup事件时,它认为你指的是这个inputDOM 对象而不是同名的函数。我建议为这两件事分别命名。

内联事件处理程序将封闭<form>元素作为其执行范围。每个具有name属性的表单控件都被视为该范围内的变量,这就是冲突的来源。

这也是使用不显眼的 JavaScript而不是内联事件处理程序的另一个重要原因。如果这样做,您不必担心函数名称与元素名称冲突。有关使用内联事件处理程序的陷阱的更多信息,请参阅onclick=“” vs 事件处理程序。

于 2013-01-20T09:51:30.837 回答
2

您的代码对我来说工作正常。在此处查看演示

所以请确保以下几点

  1. 确保在调用函数之前包含脚本。
  2. 此外,保持 ids/names 和函数名相同也不是一个好主意

    <td><input type="text" value="0" id="net_cash" name="net_cash"></td>
    

    // 在此处更改 idand 名称

于 2013-01-20T09:55:21.500 回答