防止输入中的特殊字符和重音符号('`〜^〜)(jQuery)

时间:2018-06-11 16:51:39

标签: javascript jquery html

我的输入字段限制为3个字符,我只想允许数字

我的解决方案几乎适用于所有情况:(下面的问题)

// Avoid any unwanted keys from showing
$("input#test").keypress(function(event) {
  if (!isApprovedKeyCode(event)) {
    event.preventDefault();
    event.stopImmediatePropagation();
  }
});

// Useless try to prevent accents from showing
$("input#test").keydown(function(event) {
  if (event.keyCode == 229) { // ´
    event.preventDefault();
    event.stopImmediatePropagation();
    event.stopPropagation();
    return false;
  }
});

//A few character modifiers (i.e. ´`¨^~) do not trigger keypress
//This ensures the input only contains numbers
$("input#test").keyup(function(event) {
  var element = event.target;
  var validString = element.value.replace(/[^0-9]/g, '');
  if (validString !== element.value) {
    element.value = validString;
  }
});

function isApprovedKeyCode(event) {
  var keyCode = event.which || event.keyCode;
  var character = String.fromCharCode(keyCode);
  return isValidDigit(character);
}

function isValidDigit(character) {
  var result = /\d/.test(character);
  return result;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" maxlength="3" id="test" />

问题:

  • 仍会显示重音符号(直到键盘将其从输入中删除)
  • 如果你有一个2位数的值,你输入一个重音('`〜^〜)(它消失了),然后尝试输入一个数字,由于3个字符的限制,这个数字永远不会显示。例:
    • 将输入设为12
    • 按'键
    • 按3
    • 在这种情况下,3将不会出现在输入中,您需要再次按下

正如你所看到的那样,我试图在keydown中阻止这种情况,但是没有一个事件预防尝试使用这些键

我也尝试使用type =“number”的输入。快速举例:

// Limit lenght
$("input#test").keydown(function(event) {
  var element = event.target;
  if(element.value.length > 2) {
    event.preventDefault();
    event.stopImmediatePropagation();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" min="1" max="999" id="test" />

这也显示重音并允许通过按下重音符号后加数字来增加超过限制

有关正确解决方案的想法吗?

谢谢!

0 个答案:

没有答案