2

用例是一个用于进行一些计算的 Web 应用程序表单......还有什么新的......

通常,如果用户输入一个创建 NaN 条件的值,我会将该值覆盖为 0 以避免出现 NaN。这工作正常,它使一切正常工作并防止 NaN 传播。

但从功能上讲,这并不理想。理想的做法是简单地取消 change() 事件并恢复以前的值。中断事件没什么大不了的,但是有没有办法做到这一点,以便在不诉诸数据/绑定等的情况下恢复/维护先前的输入值?

我的推理是这样的:'change()' 必须知道输入的先前值,因为 change() 是在比较值之前和之后进行的,以确定是否发生了更改。那么是否有可能从 change() 中捕获这个先前的值?这就是问题所在。

4

2 回答 2

1
var prevVal;
var input = $("input_selector");
input.focus(function(){
  prevVal = input.val();
}).change(function(){
  if (isNaN(input.val())) {
    input.val(prevVal);
  }
});
于 2013-07-01T00:29:42.220 回答
0

您可以只使用一个变量来存储以前的值并根据该值进行更改,例如:

var input = $("input#text_input");
var prev_val = null;
input.on("change", function(){
    var val = $(this).val();
    if(isNaN(val)) {
        input.val(prev_val);
        return(false);
    } else {
        prev_val = val;
        // Other stuff
    }
});
于 2013-06-30T23:04:31.180 回答