输入jquery在onchange之前获取旧值并在更改后获取值

Pek*_*kka 40 html javascript jquery

我有一个input textin jquery我想知道是否有可能在发生之前得到那个input text(type=numbertype=text)onchange的值,并且在onchange发生之后也获得相同输入输入文本的值.这是使用jquery.

我尝试了什么:

我尝试在变量上保存值然后在onchange中调用该值,但我得到空白值

Gon*_*ing 89

最简单的方法是data()在元素获得焦点时使用保存原始值.这是一个非常基本的例子:

JSFiddle: http ://jsfiddle.net/TrueBlueAussie/e4ovx435/

$('input').on('focusin', function(){
    console.log("Saving value " + $(this).val());
    $(this).data('val', $(this).val());
});

$('input').on('change', function(){
    var prev = $(this).data('val');
    var current = $(this).val();
    console.log("Prev value " + prev);
    console.log("New value " + current);
});
Run Code Online (Sandbox Code Playgroud)

最好使用委托事件处理程序

注意:当可以有多个匹配元素时,使用委托事件处理程序通常更有效.这样,只添加了一个处理程序(更小的开销和更快的初始化),并且在事件时间的任何速度差异都可以忽略不计.

以下是使用连接到的委托事件的相同示例document:

$(document).on('focusin', 'input', function(){
    console.log("Saving value " + $(this).val());
    $(this).data('val', $(this).val());
}).on('change','input', function(){
    var prev = $(this).data('val');
    var current = $(this).val();
    console.log("Prev value " + prev);
    console.log("New value " + current);
});
Run Code Online (Sandbox Code Playgroud)

JsFiddle: http ://jsfiddle.net/TrueBlueAussie/e4ovx435/65/

委托的事件通过侦听的事件(工作focusin,change一个祖先元素(上等等)document*在这种情况下),然后将所述的jQuery滤波器(input)仅在气泡链中的元件然后将所述函数仅引起该那些匹配元素事件.

*注意:一般规则,document用作委派事件的默认值而不是body.body有一个bug,与样式有关,可能导致它不会出现冒泡的鼠标事件.也document总是存在,所以你可以在DOM就绪处理程序之外附加到它:)

  • @bumperbox:如果输入具有焦点时的更改对您很重要,您应该正在侦听关键更改而不是焦点/模糊事件 (2认同)
  • 谢谢,但我建议数据的名称是"prev_val",而不是"val",以减少混淆. (2认同)

mas*_*shi 6

当然,您需要手动存储旧值,具体取决于您感兴趣的时刻(在聚焦之前,从上次更改开始)。初始值可以从 defaultValue 属性中获取:

function onChange() {
    var oldValue = this.defaultValue;
    var newValue = this.value;
}
Run Code Online (Sandbox Code Playgroud)

如 Gone Coding 的回答所示,可以采用聚焦前的值。但你必须记住,价值可以在不专注的情况下改变。

  • 我发现我始终为 this.defaultValue 得到“未定义”。里程可能会有所不同。 (3认同)
  • 我也变得不确定。我如何传递默认值? (2认同)