2013-04-22 57 views
0

我有一个输入字段,并使用正则表达式,使得它能够仅仅型数字正则表达式替换符号输入字段

$('input').keyup(function() { 
    this.value = this.value.replace(/[^0-9]/g,''); 
}); 

但一个代码,当有人试图在中场的编辑符号光标位于它的末尾。它会使编辑变得困难,因为您必须删除要编辑的符号后面的所有符号。

一个简单的演示:

http://jsfiddle.net/NehmP/

有人可以帮我解决这个问题?

回答

3

此时应更换只有当新的字符串是从旧的不同:

$('input').keyup(function() { 
    var v = this.value.replace(/[^0-9]/g,''); 
    if (v!=this.value) this.value = v; 
}); 

这样光标将不会在年底只要值有效投入。

Demonstration

+0

没错,就是它!谢谢! – sealla 2013-04-22 13:34:27

-2

你不应该拉地毯下别人的脚。你试图做的事情超出了javascript的范围,应该由浏览器/操作系统来处理。

如果您呈现文本字段的人,他们希望能够键入任何在那里(除了手机例如,在一个特定的键盘可以定义某些情况下)。

这是一个很大更好的方法简单地通知不正确输入的用户,与上下文敏感的消息,并允许他们改正自己的方式,他们都很熟悉。

如果你尝试用输入法本身的干扰,很容易造成混乱,和沮丧。此外,在一系列设备上进行测试会产生无法估量的怪癖。

此外,验证应该在服务器上执行,因为客户端验证可以被操纵。

客户端验证应仅为用户提供方便。

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

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) 
    };  
}) 

而且jsfiddle