我创建了一个PDF表单来帮助创建管道工作的估算值。承包商填写的各种线路的数量,物品的成本,然后自动计算该线的价格;这很好。
但现在我想在客户检查他们是否真的希望完成这项工作的行中添加一个复选框。如果他们选中该框,则价格将显示在最终字段中,否则将显示为0.
我的领域是: QtyRow2 ItemCostRow2 CheckboxRow2 PriceRow2
我在PriceRow2字段的“计算”标签中尝试了此Javascript代码,但无论是否选中该复选框,它都会在价格字段中显示“0”。
var oFldQty = this.getField("QtyRow2");
var oFldItem = this.getField("ItemCostRow2");
if (this.getField("CheckboxRow2").isBoxChecked(0)) {
nSubTotal = oFldQty.value * oFldItem.value;
} else {
nSubTotal = 0;
}
event.value = nSubTotal;
我应该如何修改它才能让它发挥作用?
答案 0 :(得分:1)
如果这是计算中的整个代码,那么定义nSubTotal会更安全;否则,它被定义为全局变量,并且可能表现得很奇怪。
此外,无论何时运行此计算,并且测试结果为false,nSubTotal都设置为0.这意味着,您必须定义nSubTotal,然后在处理表单时添加它。
如果你想在场上得到一个结果,就没有必要通过一个变量绕道而行;您可以在true和false路径中设置event.value。
对于单个复选框,恕我直言更容易使用其值(或其"未选中"代码原因的可移植性值)。这导致以下代码段:
Module Module1
Sub say(ByVal sayline)
Console.WriteLine(sayline)
End Sub
Sub Main()
Dim cmd As String
Do
Console.Write("> ")
cmd = Console.ReadLine()
Try
If cmd IsNot Nothing And cmd.Substring(0, 3).ToUpper().Equals("SAY") Then
say(parseInput(cmd))
End If
Catch ex As Exception
Console.WriteLine("message here")
End Try
Loop While cmd IsNot Nothing
End Sub
Function parseInput(ByVal cmd As String) As String
Dim input As String = ""
For index As Integer = 3 To cmd.Length - 1
If Char.IsLetter(cmd) Then
input += cmd.Substring(index, 1)
Else
input = input
End If
Next
Return input
End Function
End Module
那应该这样做。
但是,由于您有一个表,最佳做法是将所有计算合并到一个单独的脚本中,该脚本可以附加到隐藏的只读字段,该字段甚至不参与计算本身。这样可以更好地概述和控制计算,并防止计算顺序错误。