我有这个jquery阻止输入键被按下,我已经准备接受一系列不允许的按钮了。
$('.form input').bind('keypress', function(e) {
var keys = [13];
for (var i = keys.length; i--;){
if(e.keyCode===keys[i]){
return false;
}
}
});
我想用|
字符做类似的事情,但因为它是220的移位而我不需要阻止\从输入表单,我如何限制该字符或使用修饰键? (当然也将在服务器端处理它)。
我也知道特殊字符的键盘布局可能因键盘到键盘而有所不同,因此可能需要关注结果字符而不是键本身(不完全确定),但我不想引入大量的开销
答案 0 :(得分:6)
keypress
事件是关于字符,而非关键字。您可以直接将keyCode
与"|"
("|".charCodeAt(0)
)的字符代码进行比较,无需担心Shift键已关闭(并且可能不在所有键盘上)。< / p>
HTML:
<p>Try to type | in the box below.</p>
<input id="theInput" type="text" size="80">
JavaScript的:
jQuery(function($) {
var keys = [13, "|".charCodeAt(0)];
$("#theInput").keypress(function(e) {
var index;
for (index = 0; index < keys.length; ++index) {
if (keys[index] === e.keyCode) {
display("Denied!");
return false;
}
}
});
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
或者bažmegakapa points out,因为您已经在使用jQuery,所以可以使用其inArray
函数:
jQuery(function($) {
var keys = [13, "|".charCodeAt(0)];
$("#theInput").keypress(function(e) {
if ($.inArray(e.keyCode, keys) !== -1) {
display("Denied!");
return false;
}
});
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
答案 1 :(得分:4)
管道的密钥代码是124
,所以这应该可以正常工作:
$('.form input').bind('keypress', function(e) {
var keys = [13, 124];
for (var i = keys.length; i--;){
if(e.keyCode===keys[i]){
return false;
}
}
});
如果你正在使用jQuery,你可以使用inArray()
方法:
$('.form input').bind('keypress', function(e) {
var keys = [
13, // enter
124 // |
];
return $.inArray(e.keyCode, keys) === -1;
});
答案 2 :(得分:0)
总之,最好的解决方案是:
var keys = [13, "|".charCodeAt(0)];
$(".form input").keypress(function(e) {
return $.inArray(e.keyCode, keys) === -1;
});
答案 3 :(得分:-2)
您可以检查e.shiftKey
是否属实,但是这需要您修改数组。就个人而言,我会使用类似的东西:
var mod = {
NONE:0,
SHIFT:1,
CTRL:2,
ALT:4
};
var keys = [
[13,mod.NONE], // enter, no mod
[220,mod.SHIFT] // \ with Shift = |
];
for( var i=keys.length; i--;) {
if( e.keyCode === keys[i][0] && (e.shiftKey + 2*e.ctrlKey + 4*e.altKey) === keys[i][1]) {
return false;
}
}
答案 4 :(得分:-2)
如果您只是想要不包含特定字符(甚至字符集),我认为更好的方法是从表单值中删除任何受限制的字符。
$('.form input').keyup(function(e){
$(this).val( $(this).val().replace("|", "" ) );
});