我试图禁用用户名文本字段中的空格,但是我的代码禁用使用后箭头。有什么方法可以允许反向箭头吗?
$(function() {
var txt = $("input#UserName");
var func = function() {
txt.val(txt.val().replace(/s/g, ''));
}
txt.keyup(func).blur(func);
});
小提琴:http://jsfiddle.net/EJFbt/
您可以添加keydown
处理程序并防止空格键(即32
)的默认操作:
$("input#UserName").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/s/g, "");
}
});
演示:http://jsfiddle.net/EJFbt/1/
这似乎对我有用:
<input type="text" onkeypress="return event.charCode != 32">
它不会"禁用"反向箭头—无论何时按下一个键,您的代码都会直接替换所有的文本,并且每次发生这种情况时,插入符号位置都会丢失。
千万别那样做。
使用更好的机制来禁止空格,例如当按下的键是space
时,从onkeydown处理程序返回false
:
$(function() {
$("input#Username").on("keydown", function (e) {
return e.which !== 32;
});
});
这样,你的文本框一开始就被禁止接收空格,你不需要替换任何文本。因此,插入符号将不受影响。
更新
@VisioN的改编代码也将为复制粘贴操作添加这种禁止空格的支持,同时仍然避免文本替换- 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.
});
});
尝试检查函数中正确的键代码:
$(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);
});
这样,只有32
的keyCode
(空格)调用replace函数。这将允许其他keypress
事件通过。根据IE中的可比性,您可能需要检查e
是否存在,使用e.which
,或者可能使用全局窗口。事件对象。这里有很多问题都涉及到这些话题。
如果您不确定某个keyCode
,请尝试这个有用的网站
一行:
onkeypress="return event.which != 32"