【问题标题】:Jquery keypress, keydown, keyup, input does not suit my requirementJquery keypress、keydown、keyup、输入不符合我的要求
【发布时间】:2015-05-28 17:22:24
【问题描述】:

我有一个要求,即在输入文本框中,必须对输入的每个值进行验证,并且在输入第 6 个字符后,必须将连字符附加到字符串中。

我尝试过的解决方案和遇到的问题如下:

  1. keyup - 它可以完美地检测输入的每个字符并附加一个连字符,除了“它只会发送一个长按键输入”。例如:如果我长按'9',文本框中的值将是'999999999999',但keyup事件只触发一次。

  2. keypress - 它可以完美地检测输入的每个字符并附加连字符,除了“在退格上不调用按键事件”。例如:如果我输入退格键,我可以再次验证该字段并删除连字符。

  3. keydown - 我没有得到每个按键的确切当前值。例如:如果我在字段中输入“9”,在 keydown 事件中,我只会得到“”作为当前值。我输入'99',我得到'9'作为字段值。由于在 keydown 事件中,字段中的值不会得到更新。

  4. 输入 - 一切正常,除了我无法在此函数中获取键码。 (没有它我无法检测到退格)。

那么,应该怎么做呢

  1. 使用长按键,
  2. 退格检测,
  3. 按下按键时更新当前值,

同时工作。

在过去的几个小时里,我一直在探索很多东西。可能这是一件简单的事情,但我无法得到答案。您的帮助将不胜感激。提前致谢。

【问题讨论】:

  • .on('change', function(){}) 呢?
  • 延迟 keydown 是否适合您的用例:jsfiddle.net/whfppw0q ?
  • 谢谢@DarrenSweeney。但是“更改”功能只会触发输入模糊。
  • 所以实际上您正在寻找某种输入掩码。有很多插件可用。我想你应该找到一个适合你的需求,例如这个:github.com/RobinHerbots/jquery.inputmask
  • 谢谢@A.Wolff。这个解决方案会帮助我。我会试试看,如果这个解决方案有效,赞!

标签: jquery input keypress keydown keyup


【解决方案1】:

我有同样的问题并修复它添加这两个功能:

$('#YourId').keydown(function () {
  yourFunction();
}).keyup(function () {
  yourFunction();
});

【讨论】:

    【解决方案2】:

    如果您只需要执行一次,例如第一次输入第 6 个字符而不是每 6 个字符,您可以执行以下操作:

    https://jsfiddle.net/zx7snsos/

    $('input').on('keyup', function(e){
        var str=$('input').val();
        if(str.length>6&&str.indexOf('-')!=6)
            str=str.slice(0,6)+'-'+str.slice(6);
        else if(str.length==6)
            str+='-';
        $('input').val(str);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-19
      • 2012-06-06
      • 2011-03-23
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多