Onkeypress更新输入落后一步

时间:2015-02-09 23:41:01

标签: javascript jquery

我正在尝试使用其他2个输入更新输入。例如

金额:(用户输入值)

费用:(已设定值 - 禁用值:0.0002)

总计:(金额 - 费用)通过以下javascript计算出来

$('#amount').keypress(function() {
var total = $('#amount').val() - $('#fee').val();
if(typeof total != 'undefined'){ $('#total').val(total) }});

当我按下'在我输入一个数字时,它比使用total更新输入后面一步。

比如说如果我在输入金额中输入1,那么当我再次按1时,总数将是-0.0002(费用),它将是0.9998(即使输入的数量现在是11,依此类推。 )

3 个答案:

答案 0 :(得分:4)

您使用keypress的原因包括2个事件keydownkeyup,因此您的功能会在第一个事件上启动 - {{1所以你得到你的价值,如你所说"落后"后面的一步,导致keydown事件被触发时你的输入字段还没有收到按下的键值。使用keydown,您将获得结果:

keyup

Fiddle

答案 1 :(得分:0)

是的,因为当调用函数时,字段不会使用值

更新

在此步骤中调用该事件

  • KEYDOWN
  • 按键时
  • 的UpdateView
  • 按键时
  • 的UpdateView
  • KEYUP

因此,如果您可以将此事件更改为 keyup ,那么您将获得最新值。

答案 2 :(得分:0)

发布的答案是很好的答案,但此处使用的最佳事件是oninput事件,因为它更快。

$('#amount').on('input', function() {
    var total = $('#amount').val() - $('#fee').val();

    if(typeof total != 'undefined'){
        $('#total').val(total);
    }
});

所有浏览器支持: browser support。实际上,它比onchangeonkeyup之类的其他事件得到更好的支持。您可以在https://caniuse.com/上进行比较。

您甚至可以将此事件用于其他输入元素。像复选框,单选按钮和选择元素一样。

很快。因此,您可以将其与搜索查询结合使用,以使搜索结果返回更快。

请注意:由于这不是键盘事件,因此该事件中将没有keyCode或任何其他与键盘相关的值。


了解更多