如何防止在 html 文本输入中输入分号,但允许使用冒号?
How to prevent a semicolon from being entered into html text input, but allowing a colon?
我想允许输入 1:10,但不允许输入 1;10。但是, : 和 ;两者都对应于 keyCode 186,因此使用 keyCode 来防止 ;输入到我的输入字段的键不起作用。我也研究过使用 charCodes,但是 charCodes 没有 ;或:价值观。最后,我查看了 ascii 表。它们具有分号和冒号值。我有什么办法可以使用 ascii 表来防止 ;从输入到我的文本框的键,但 : 键被允许?还是有另一种方法可以让我这样做?我还考虑过检测连续的两个键输入,这样我就可以检测到 shift 键输入,但这似乎是一个肮脏的解决方案。
$("input.form-1").bind({
keydown: function(e) {
if(e.which ===186) { //trying to disallow semicolons, which also disallows colons
return false;
}
}
});
首先,不要使用bind()
。它在 long 之前就被弃用了。请改用 on()
。
要解决您的问题,您需要检测 shift
键是否被按下,为此您可以使用事件的 shiftKey
属性:
$("input.form-1").on({
keydown: function(e) {
if (!e.shiftKey && e.which === 186) {
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-1" type="text" />
正如 Rory 所说,您应该使用 on
。除了检查 shiftKey,您还可以只检查事件上的 key
属性。 MDN KeyboardEvent.key
$("input.form-1").on({
keydown: function(e) {
if(e.key === ";") { // disallow semicolon
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-1" type="text" />
您只需尝试 e.keycode
:
58 和 ;
59 的键码。如果您想要任何字母或符号的键码,只需在提及代码下方的文本中键入。
<html>
<body>
<input type="text" size="40" onkeypress="myFunction(event)">
<p id="demo"></p>
<script>
function myFunction(event) {
var x = event.keyCode;
document.getElementById("demo").innerHTML = x;
}
</script>
</body>
</html>
在 if 条件下检查键码和键。
$("input.form-1").on({
keydown: function(e) {
if(e.key === ";") { // disallow semicolon
return false;
}
}
});
我想允许输入 1:10,但不允许输入 1;10。但是, : 和 ;两者都对应于 keyCode 186,因此使用 keyCode 来防止 ;输入到我的输入字段的键不起作用。我也研究过使用 charCodes,但是 charCodes 没有 ;或:价值观。最后,我查看了 ascii 表。它们具有分号和冒号值。我有什么办法可以使用 ascii 表来防止 ;从输入到我的文本框的键,但 : 键被允许?还是有另一种方法可以让我这样做?我还考虑过检测连续的两个键输入,这样我就可以检测到 shift 键输入,但这似乎是一个肮脏的解决方案。
$("input.form-1").bind({
keydown: function(e) {
if(e.which ===186) { //trying to disallow semicolons, which also disallows colons
return false;
}
}
});
首先,不要使用bind()
。它在 long 之前就被弃用了。请改用 on()
。
要解决您的问题,您需要检测 shift
键是否被按下,为此您可以使用事件的 shiftKey
属性:
$("input.form-1").on({
keydown: function(e) {
if (!e.shiftKey && e.which === 186) {
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-1" type="text" />
正如 Rory 所说,您应该使用 on
。除了检查 shiftKey,您还可以只检查事件上的 key
属性。 MDN KeyboardEvent.key
$("input.form-1").on({
keydown: function(e) {
if(e.key === ";") { // disallow semicolon
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-1" type="text" />
您只需尝试 e.keycode
:
58 和 ;
59 的键码。如果您想要任何字母或符号的键码,只需在提及代码下方的文本中键入。
<html>
<body>
<input type="text" size="40" onkeypress="myFunction(event)">
<p id="demo"></p>
<script>
function myFunction(event) {
var x = event.keyCode;
document.getElementById("demo").innerHTML = x;
}
</script>
</body>
</html>
在 if 条件下检查键码和键。
$("input.form-1").on({
keydown: function(e) {
if(e.key === ";") { // disallow semicolon
return false;
}
}
});