我使用了以下jQuery函数来阻止用户输入特定的密钥,
$('#prod_name_en').keypress(function (e) {
if (e.key.match(/[!@#]+/))
{
e.preventDefault();
}
});
它在mozilla中运行良好,但在chrome中运行良好。
抛出以下错误,
未捕获的TypeError:无法读取属性'匹配'未定义的
请帮我解决此问题。
答案 0 :(得分:1)
不要依赖JQuery的键盘事件键属性。它可能无法正常工作。
有两种不同类型的代码:键盘代码(表示用户按下的键盘上的键的数字)和字符代码(表示Unicode字符的数字)。 IE仅将字符代码存储在keyCode
中,而所有其他浏览器将其存储在which
中。有些(但不是全部)浏览器也会将其存储在charCode
和/或keyCode
中。
要获得字符值 - 通过String.formCharCode
方法使用字符代码:
$('#prod_name_en').on('keypress', function(e){
var keyCode = e.keyCode || e.charCode || e.which; // cross-browser key-code detection
if (String.fromCharCode(keyCode).match(/[!@#]+/)) e.preventDefault();
});
答案 1 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#prod_name_en').keypress(function (e) {
// 97 code for a and 98 for b
if(e.keyCode==97 || e.keyCode==98)
e.preventDefault();
});
});
</script>
<input type="text" id="prod_name_en">
答案 2 :(得分:0)
使用String.prototype.slice()
,input
事件,event.target.value
$("#prod_name_en").on("input", function(e) {
var value = e.target.value;
if (value.slice(-1).match(/[!@#]+/g)) {
e.target.value = value.slice(0, -1);
e.preventDefault();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input type="text" id="prod_name_en" value="" />
jsfiddle https://jsfiddle.net/4rmsjctf/1/