Jquery 捕获change()的上一个值,以便将输入字段还原为该值?

Jquery 捕获change()的上一个值,以便将输入字段还原为该值?,jquery,Jquery,这个用例是一个用于做一些计算的web应用程序表单…还有什么新的 通常,如果用户输入的值创建了NaN条件,我会将该值重写为0以避免NaN。这很好,它保持了一切工作,并阻止了NaN的传播 但这在功能上并不理想。理想的做法是取消change()事件并恢复以前的值。中断事件没什么大不了的,但是有没有办法恢复/维护先前的输入值,而无需诉诸数据/绑定等 我的推理是:“change()”必须知道输入的前一个值,因为change()是在前后比较值以确定是否发生了更改。那么,是否可以从change()中捕获此先前

这个用例是一个用于做一些计算的web应用程序表单…还有什么新的

通常,如果用户输入的值创建了NaN条件,我会将该值重写为0以避免NaN。这很好,它保持了一切工作,并阻止了NaN的传播

但这在功能上并不理想。理想的做法是取消change()事件并恢复以前的值。中断事件没什么大不了的,但是有没有办法恢复/维护先前的输入值,而无需诉诸数据/绑定等


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

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

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
    }
});

从用户体验的角度来看,您还应该告知用户使用了字符而不是数字。一个可以修剪空白和字符的正则表达式真的很方便吗
var prevVal;
var input = $("input_selector");
input.focus(function(){
  prevVal = input.val();
}).change(function(){
  if (isNaN(input.val())) {
    input.val(prevVal);
  }
});