0

我正在尝试将旧的 JavaScript 计算器从旧站点移植到新站点。旧版计算器是一种包含大量表格/div 标记的表格。只有一个 JS 文件可以处理这个计算器的所有逻辑。当您填写 calc 中的每个输入字段时,onChange() 会调用 JS 文件中定义的函数。这一切都很好;Chrome 开发工具中没有显示错误,我得到了我期望的结果。

由于这个计算器是一团乱七八糟的标记,我已经去掉了很多不必要的元素和内联样式来创建一个更短(标记长度)的表单。问题是,当我尝试将计算器与我的新标记和相同的旧 JS 文件一起使用时,它不起作用。或者,我应该说,大约 98% 的方法都不起作用。它似乎仍在输出一些数字,但不是全部。一旦我切换回旧标记,它就会再次起作用。

使用我的新标记,我得到“无法读取未定义的属性长度”。我不知道如何解决这个问题,因为我知道一些字段正在将它们的值提交给 JS。我也不明白为什么没有错误,并且使用旧 html 的计算按预期工作(见下面的 JSFiddle 链接)。

更新:这是一个完整的例子: http: //machinesandwich.com/demo.html

4

1 回答 1

1

这有点难找,但缺点是您的标记与 JavaScript 的预期不一致(在多个地方)。

我能找到的第一个实例是您的新标记包含两个名为ISB_Elec.

在那种情况下,当onchange事件被触发时,fnISBud(form)被调用,随后,调用fnStrToInt(form.ISB_Elec.value). fnStrToInt期待一个字符串,但有两个同名的表单元素,它正在传递一个NodeList。然后for循环抛出异常。

这至少发生在两个表单域都被命名的地方ISB_Trans_Other

最后,您的fnISBud(form)函数会执行一系列特定于字段的计算,并在一个地方调用fnStrToInt(form.ISB_Ins_Auto.value),但是在您的标记中没有命名输入ISB_Ins_Auto- 再次引发异常。

总之,仔细检查你的标记,并确保你正确地包含并命名<input />了你的 JS 函数所期望的每个元素。

于 2012-06-12T22:21:25.913 回答