我有一个输入字段和一个带有regexp的代码,这使得它只能输入数字
$('input').keyup(function () {
this.value = this.value.replace(/[^0-9]/g,'');
});
但是当有人试图在字段中间编辑符号时,会在其末尾放置光标。它使编辑变得困难,因为您必须删除要编辑的符号后面的所有符号。
一个简单的演示:
有人可以帮我解决吗?
答案 0 :(得分:4)
只有在新字符串与旧字符串不同时才应替换:
$('input').keyup(function () {
var v = this.value.replace(/[^0-9]/g,'');
if (v!=this.value) this.value = v;
});
这样只要值有效,光标就不会放在最后。
答案 1 :(得分:0)
您应该尝试某种类型的输入屏蔽插件,例如maskedInput。
$("input").mask("9999"); // People will only be able to type numbers of 4 chars long!
$("input").mask("9?999"); // People will only be able to type numbers from 1 to 4 chars long!
查看更多示例here。
答案 2 :(得分:0)
即使该值无效,此代码光标也不会放在单词的末尾。 它是dystroy的解决方案和我在互联网上找到的代码的组合。 我认为它仍然存在许多缺陷而且时间太长但也许它仍然可以帮助某些人...... 非常感谢你们:)
function doGetCaretPosition (ctrl) {
var CaretPos = 0;
// IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0'){
CaretPos = ctrl.selectionStart;
}
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange){
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
var remember;
$('input').keyup(function () {
remember = doGetCaretPosition(this);
var v = this.value.replace(/[^0-9]/g,'');
if (v!=this.value) {
this.value = v;
setCaretPosition(this,remember - 1)
};
})
答案 3 :(得分:-2)
你不应该从别人的脚下拉地毯。您要做的事情超出了javascript的范围,应该由浏览器/操作系统处理。
如果您向某人提供文本字段,他们希望能够在那里输入任何内容(除非在某些情况下在手机上,例如,可以定义特定键盘)。
这是一种更好的方法,可以通过上下文敏感的消息简单地通知用户不正确的输入,并允许他们以他们熟悉的方式自行更正。
如果您试图干扰输入法本身,可能会引起混淆和沮丧。此外,在一系列设备上进行测试将产生无数的怪癖。
此外,应该在服务器上执行验证,因为可以操纵客户端验证。
客户端验证应仅为方便用户使用。