我正在尝试在用户名文本字段中禁用空格,但我的代码也禁用了后退箭头。还有什么方法可以让后箭头?
$(function() {
var txt = $("input#UserName");
var func = function() {
txt.val(txt.val().replace(/\s/g, ''));
}
txt.keyup(func).blur(func);
});
答案 0 :(得分:47)
您可以添加keydown
处理程序并阻止空格键的默认操作(即32
):
$("input#UserName").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/\s/g, "");
}
});
答案 1 :(得分:6)
这似乎对我有用:
<input type="text" onkeypress="return event.charCode != 32">
答案 2 :(得分:5)
它不会“禁用”后退箭头 - 只要按下某个键,您的代码就会一直替换所有文本,并且每次发生这种情况都会丢失插入位置。
根本不要那样做。
使用更好的机制来禁止空格,例如returning false
from an onkeydown handler when the key pressed is space
:
$(function() {
$("input#Username").on("keydown", function (e) {
return e.which !== 32;
});
});
这样,您的文本框首先不会接收空格,也不需要替换任何文本。因此,插入符号将不受影响。
@VisioN's adapted code还会为复制粘贴操作添加这种禁止空格的支持,同时仍然避免文本替换 - keyup
处理程序,这些处理程序会影响您的文本框值,同时您的插入符号仍处于活动状态
所以这是最终的代码:
$(function() {
// "Ban" spaces in username field
$("input#Username").on({
// When a new character was typed in
keydown: function(e) {
// 32 - ASCII for Space;
// `return false` cancels the keypress
if (e.which === 32)
return false;
},
// When spaces managed to "sneak in" via copy/paste
change: function() {
// Regex-remove all spaces in the final value
this.value = this.value.replace(/\s/g, "");
}
// Notice: value replacement only in events
// that already involve the textbox losing
// losing focus, else caret position gets
// mangled.
});
});
答案 3 :(得分:1)
尝试检查函数中的正确密钥代码:
$(function(){
var txt = $("input#UserName");
var func = function(e) {
if(e.keyCode === 32){
txt.val(txt.val().replace(/\s/g, ''));
}
}
txt.keyup(func).blur(func);
});
这样只有keyCode
32
(空格)才会调用替换函数。这将允许其他keypress
事件通过。根据IE中的可比性,您可能需要检查e
是否存在,使用e.which
,还是使用全局window.event对象。这里有很多问题涉及这些主题。
如果您对某个keyCode
不确定,请尝试这个有用的site。