我将一个值传递给最终使用 javascript 分配给文本框的表单。该值是基于来自另一个页面/表单的值的计算。但是,文本框是可编辑的。
当使用之前保存的数据重新加载表单时,如果文本框的值是在保存时手动编辑的,我不希望文本框的值被另一个页面的预先计算值覆盖。
另一个规定是,可以更改具有创建计算的值的页面/表单。因此,我还想检查计算值自上次加载以来是否发生了变化,如果是,则加载该值以覆盖手动输入的值。
所以... 如果文本框为空,则用计算值填充 否则如果 手动输入的值胜过计算值 否则如果 计算值自上次计算以来发生了变化,它胜过手动输入的值。
关于这一切的另一个问题是,如何确定用户是否在文本框中键入内容以确定该值是否是手动输入的?
最佳答案
您可以使用几个 session 变量来完成此操作。第一个 session 变量是文本框的值。由于您有另一个页面为您生成值,因此您不能依赖 ViewState 为您存储值,它只能与页面上的 PostBacks 一起使用。
第二个 session 变量是一个简单的 bool 值,您可以调用 IsCalculated。这可以根据手头的情况设置为 true 或 false。
最后一步是何时触发 IsCalculated 值的更改。您可以使用 jQuery 甚至标准 Javascript 轻松地将 TextChanged 事件连接到 TextBox。除非您还想设置 AJAX 以设置 Session 变量,否则最好的办法是拥有一个名为 IsCalculated 的隐藏表单字段,该字段由 TextChanged 事件修改。
加载“主”页面时,您可以轻松实现上面列出的规则,确定哪些值需要进入文本框。如果随后手动更改该值,将触发 JavaScript 事件,当您转到“计算”页面时,您需要检查隐藏的表单字段并相应地设置 IsCalculated 的 session 变量。您可以根据需要进行任何计算,返回“主”页面,并相应地重新执行显示规则。
注意:您在问题中提到计算值将传递到页面,我假设通过 URL 参数,这就是为什么您只需要一个 session 变量来跟踪 TextBox 的值。如果不是这种情况,您可能需要第二个 session 变量。一个用于跟踪 TextBox 值,一个用于跟踪计算值。
关于javascript - 需要有关如何为文本框分配正确值的逻辑方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3779847/