Javascript 防止NaN';是否禁止在可编辑的内容字段中输入内容?

Javascript 防止NaN';是否禁止在可编辑的内容字段中输入内容?,javascript,jquery,contenteditable,jquery-events,Javascript,Jquery,Contenteditable,Jquery Events,我正在寻找一种方法来制作一个只使用数字的(或广泛使用的,可以在运行中使用多种类型的验证器)到目前为止,我有一些类似的东西: this.ContentEditable.bind("keydown", this, function (event) { if ((event.data.NumericOnly === true) && (event.which != 8) && (event.which != 189) && (

我正在寻找一种方法来制作一个只使用数字的(或广泛使用的,可以在运行中使用多种类型的验证器)到目前为止,我有一些类似的东西:

this.ContentEditable.bind("keydown", this, function (event) {
    if ((event.data.NumericOnly === true) && (event.which != 8) && (event.which != 189) && (event.which != 190)) {
        var c = String.fromCharCode(event.which);
        if ('0123456789'.indexOf(c) < 0) { return (false); }
    }
});
this.ContentEditable.bind(“keydown”),this,函数(事件){
if((event.data.NumericOnly==true)&&&(event.which!=8)&&(event.which!=189)&&(event.which!=190)){
var c=String.fromCharCode(event.which);
if('0123456789'.indexOf(c)<0){return(false);}
}
});
此方法的警告是,如果用户已经键入了“.”(字符190,
String.fromCharCode
无法使用,字符8为退格)或“-”(字符189)重复,并且/或者除了
contenteditable=true
文本中的第一个字符以外的任何地方,都应将其视为无效。我可以获取文本并用return(false)取消输入;如果它已经包含一个“.”和一个“.”正在被键入,或者检查光标是否位于“-”的零位置,并且
contenteditable=true
的文本中没有任何内容,但是我想要更具扩展性的内容


是否有可能获得密钥事件的最终结果,以便在我仍然可以选择取消密钥事件的情况下将其发送给验证器?

我个人会以懒散的方式执行此操作-每次用户输入某个内容(
.on('input',fn)
对于现代浏览器)尝试将其计算到一个数字,如果无法恢复到以前的值(可能是通过一些
.data()
黑客攻击,如果
事件。preventDefault()
无法恢复)@fabriciomatté:问题在于光标位置出错。@T.J.Crowder我为保存
元素做了一个补丁。selectionStart
selectionEnd
,并考虑在
selectionStart
之前删除了多少字符,然后将其设置回原处,在
选择之前移除字符,然后将其设置回原处。我的有点太难看了,因为当我测试时,Chrome在移动光标之前启动了
input
事件,而Firefox在移动光标之后启动,这需要一些黑客才能获得良好的跨浏览器行为。我甚至没有尝试让它在老IE上工作。@fabriciomatté:哈哈!听起来很“有趣”。:-)@T.J.Crowder是的<代码>;)
基本上,我在
input
处理程序中使用了
setTimeout(fn,0)
,这样两个浏览器都会将光标移动到输入字符之后。如果我能让它在IE8中工作,我会为它进行回购(好吧,在IE10的
input
propertychanged
事件中,退格/擦除字符不会触发,因此行为仍然不一致..)